├── .gitattributes ├── .gitignore ├── CBcrypt ├── CBCrypt.sln ├── CBcrypt │ ├── CBCrypt.csproj │ ├── CBCryptKey.cs │ ├── CBcrypt.cs │ ├── Challenge.cs │ ├── ChallengeResponse.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ └── packages.config └── NUnitTest │ ├── NUnitTest.csproj │ ├── Properties │ └── AssemblyInfo.cs │ ├── Test.cs │ └── packages.config ├── Documentation ├── Block_Diagram.gif ├── Block_Diagram.graphml ├── CBCrypt Presentation.pptx ├── CBCrypt.chm └── html │ ├── CloseSearch.png │ ├── CollapseAll.bmp │ ├── Collapsed.gif │ ├── ExpandAll.bmp │ ├── Expanded.gif │ ├── FillNode.aspx │ ├── FillNode.php │ ├── Index.aspx │ ├── Index.gif │ ├── Index.html │ ├── Item.gif │ ├── LoadIndexKeywords.aspx │ ├── LoadIndexKeywords.php │ ├── Search.gif │ ├── SearchHelp.aspx │ ├── SearchHelp.inc.php │ ├── SearchHelp.php │ ├── Splitter.gif │ ├── SyncTOC.gif │ ├── TOC.css │ ├── TOC.js │ ├── Web.Config │ ├── WebKI.xml │ ├── WebTOC.xml │ ├── favicon.ico │ ├── fti │ ├── FTI_100.json │ ├── FTI_101.json │ ├── FTI_102.json │ ├── FTI_103.json │ ├── FTI_104.json │ ├── FTI_105.json │ ├── FTI_107.json │ ├── FTI_108.json │ ├── FTI_109.json │ ├── FTI_110.json │ ├── FTI_111.json │ ├── FTI_112.json │ ├── FTI_114.json │ ├── FTI_115.json │ ├── FTI_116.json │ ├── FTI_117.json │ ├── FTI_118.json │ ├── FTI_97.json │ ├── FTI_98.json │ ├── FTI_99.json │ └── FTI_Files.json │ ├── html │ ├── 104880745.htm │ ├── 1050510383.htm │ ├── 1163784371.htm │ ├── 1369563518.htm │ ├── 1415551336.htm │ ├── 1441647171.htm │ ├── 1494598437.htm │ ├── 151453034.htm │ ├── 1514855079.htm │ ├── 1534636348.htm │ ├── 1564874448.htm │ ├── 1581038909.htm │ ├── 1581295153.htm │ ├── 1718333260.htm │ ├── 1734766934.htm │ ├── 1750187521.htm │ ├── 1882239146.htm │ ├── 1888296670.htm │ ├── 1905304697.htm │ ├── 1917065220.htm │ ├── 1948183430.htm │ ├── 1955941255.htm │ ├── 1961160179.htm │ ├── 2075119955.htm │ ├── 2143963147.htm │ ├── 232981836.htm │ ├── 326356533.htm │ ├── 423211944.htm │ ├── 448759364.htm │ ├── 46105457.htm │ ├── 463588477.htm │ ├── 481982644.htm │ ├── 508581146.htm │ ├── 517266944.htm │ ├── 583375642.htm │ ├── 609681953.htm │ ├── 718221398.htm │ ├── 939002703.htm │ ├── 952553138.htm │ ├── 965374767.htm │ └── 998664710.htm │ ├── icons │ ├── CFW.gif │ ├── Caution.gif │ ├── LastChild.gif │ ├── adm.gif │ ├── adm_arch.gif │ ├── adm_dev.gif │ ├── adm_dev_arch.gif │ ├── alert_caution.gif │ ├── alert_note.gif │ ├── alert_security.gif │ ├── arch.gif │ ├── big_adm.gif │ ├── big_arch.gif │ ├── big_dev.gif │ ├── big_kw.gif │ ├── box.gif │ ├── collall.gif │ ├── collapse.gif │ ├── collapse_all.gif │ ├── copycode.gif │ ├── copycodeHighlight.gif │ ├── dev.gif │ ├── dev_arch.gif │ ├── dropdown.gif │ ├── dropdownHover.gif │ ├── drpdown.gif │ ├── drpdown_orange.gif │ ├── drpdown_orange_up.gif │ ├── drpup.gif │ ├── exp.gif │ ├── expall.gif │ ├── expand_all.gif │ ├── filter1a.gif │ ├── filter1c.gif │ ├── footer.gif │ ├── gradient.gif │ ├── greencheck.gif │ ├── greychck.gif │ ├── header_prev_next.jpg │ ├── header_sql_tutorial_blank.jpg │ ├── header_sql_tutorial_logo.GIF │ ├── kw.gif │ ├── kw_adm.gif │ ├── kw_adm_arch.gif │ ├── kw_adm_dev.gif │ ├── kw_adm_dev_arch.gif │ ├── kw_arch.gif │ ├── kw_dev.gif │ ├── kw_dev_arch.gif │ ├── load.gif │ ├── load_hover.gif │ ├── note.gif │ ├── pencil.GIF │ ├── privclass.gif │ ├── privdelegate.gif │ ├── privenum.gif │ ├── privenumeration.gif │ ├── privevent.gif │ ├── privextension.gif │ ├── privfield.gif │ ├── privinterface.gif │ ├── privmethod.gif │ ├── privproperty.gif │ ├── privstructure.gif │ ├── protclass.gif │ ├── protdelegate.gif │ ├── protenum.gif │ ├── protenumeration.gif │ ├── protevent.gif │ ├── protextension.gif │ ├── protfield.gif │ ├── protinterface.gif │ ├── protmethod.gif │ ├── protoperator.gif │ ├── protproperty.gif │ ├── protstructure.gif │ ├── pubclass.gif │ ├── pubdelegate.gif │ ├── pubenum.gif │ ├── pubenumeration.gif │ ├── pubevent.gif │ ├── pubextension.gif │ ├── pubfield.gif │ ├── pubinterface.gif │ ├── pubmethod.gif │ ├── puboperator.gif │ ├── pubproperty.gif │ ├── pubstructure.gif │ ├── requirements1a.gif │ ├── requirements1c.gif │ ├── save.gif │ ├── save_hover.gif │ ├── security.gif │ ├── seealso1a.gif │ ├── seealso1c.gif │ ├── slMobile.gif │ ├── static.gif │ └── xna.gif │ ├── images │ ├── 030c41d9079671d09a62d8e2c1db6973.gif │ ├── LT_tab.gif │ ├── RT_tab.gif │ ├── alert_note.gif │ ├── lightweight_topnav.png │ ├── lightweight_topnav_slice.gif │ ├── lt_search.gif │ ├── msdn2010branding-stripe.png │ ├── msdn2010branding-stripe1.png │ ├── msg-icon.gif │ ├── msg-incoming.gif │ ├── msg-outgoing.gif │ ├── rt_search.gif │ ├── searchicon.gif │ └── slice_search.gif │ ├── index.php │ ├── scripts │ ├── CheckboxMenu.js │ ├── CommonUtilities.js │ ├── Dropdown.js │ ├── EventUtilities.js │ ├── SplitScreen.js │ ├── languageSelector.js │ ├── script_feedBack.js │ └── script_manifold.js │ └── styles │ ├── Presentation.css │ ├── Whidbey │ └── presentation.css │ ├── highlight.css │ ├── highlight.js │ ├── lightweight.css │ ├── lw-code.css │ ├── lw-miranda.css │ └── msdn10 │ ├── Msdn10-bn20091118.css │ ├── Msdn10_vstudio-bn20091118.css │ ├── adart_repository.png │ ├── bg.png │ ├── bg_vstudio.png │ ├── bullet.gif │ ├── clear.gif │ ├── contentpane.png │ ├── contentpaneleft.png │ ├── contentpaneright.png │ ├── internav.png │ ├── mtps-bn20091118.css │ └── subnav_vstudio.png ├── LICENSE └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Build Folders (you can keep bin if you'd like, to store dlls and pdbs) 2 | [Bb]in/ 3 | [Oo]bj/ 4 | 5 | # mstest test results 6 | TestResults 7 | 8 | ## Ignore Visual Studio temporary files, build results, and 9 | ## files generated by popular Visual Studio add-ons. 10 | 11 | # User-specific files 12 | *.suo 13 | *.user 14 | *.sln.docstates 15 | 16 | # Build results 17 | [Dd]ebug/ 18 | [Rr]elease/ 19 | x64/ 20 | *_i.c 21 | *_p.c 22 | *.ilk 23 | *.meta 24 | *.obj 25 | *.pch 26 | *.pdb 27 | *.pgc 28 | *.pgd 29 | *.rsp 30 | *.sbr 31 | *.tlb 32 | *.tli 33 | *.tlh 34 | *.tmp 35 | *.log 36 | *.vspscc 37 | *.vssscc 38 | .builds 39 | 40 | # Visual C++ cache files 41 | ipch/ 42 | *.aps 43 | *.ncb 44 | *.opensdf 45 | *.sdf 46 | 47 | # Visual Studio profiler 48 | *.psess 49 | *.vsp 50 | *.vspx 51 | 52 | # Guidance Automation Toolkit 53 | *.gpState 54 | 55 | # ReSharper is a .NET coding add-in 56 | _ReSharper* 57 | 58 | # GhostDoc is a .NET coding add-in 59 | *.GhostDoc* 60 | 61 | # NCrunch 62 | *.ncrunch* 63 | .*crunch*.local.xml 64 | 65 | # Installshield output folder 66 | [Ee]xpress 67 | 68 | # DocProject is a documentation generator add-in 69 | DocProject/buildhelp/ 70 | DocProject/Help/*.HxT 71 | DocProject/Help/*.HxC 72 | DocProject/Help/*.hhc 73 | DocProject/Help/*.hhk 74 | DocProject/Help/*.hhp 75 | DocProject/Help/Html2 76 | DocProject/Help/html 77 | 78 | # Click-Once directory 79 | publish 80 | 81 | # Publish Web Output 82 | *.Publish.xml 83 | 84 | # NuGet Packages Directory 85 | packages 86 | 87 | # Windows Azure Build Output 88 | csx 89 | *.build.csdef 90 | 91 | # Windows Store app package directory 92 | AppPackages/ 93 | 94 | # Others 95 | [Bb]in 96 | [Oo]bj 97 | sql 98 | TestResults 99 | [Tt]est[Rr]esult* 100 | *.Cache 101 | ClientBin 102 | [Ss]tyle[Cc]op.* 103 | ~$* 104 | *.dbmdl 105 | Generated_Code #added for RIA/Silverlight projects 106 | 107 | # Backup & report files from converting an old project file to a newer 108 | # Visual Studio version. Backup files are not needed, because we have git ;-) 109 | _UpgradeReport_Files/ 110 | Backup*/ 111 | UpgradeLog*.XML 112 | *.userprefs 113 | -------------------------------------------------------------------------------- /CBcrypt/CBCrypt.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 2013 4 | VisualStudioVersion = 12.0.21005.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CBCrypt", "CBCrypt\CBCrypt.csproj", "{7AEFCC6A-DD32-4286-9839-5A4765D7E94C}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NUnitTest", "NUnitTest\NUnitTest.csproj", "{4FE62D52-99B6-4EFB-9C53-71DEE771569A}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Release|Any CPU = Release|Any CPU 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {7AEFCC6A-DD32-4286-9839-5A4765D7E94C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {7AEFCC6A-DD32-4286-9839-5A4765D7E94C}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {7AEFCC6A-DD32-4286-9839-5A4765D7E94C}.Release|Any CPU.ActiveCfg = Release|Any CPU 19 | {7AEFCC6A-DD32-4286-9839-5A4765D7E94C}.Release|Any CPU.Build.0 = Release|Any CPU 20 | {4FE62D52-99B6-4EFB-9C53-71DEE771569A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {4FE62D52-99B6-4EFB-9C53-71DEE771569A}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {4FE62D52-99B6-4EFB-9C53-71DEE771569A}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {4FE62D52-99B6-4EFB-9C53-71DEE771569A}.Release|Any CPU.Build.0 = Release|Any CPU 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | EndGlobal 29 | -------------------------------------------------------------------------------- /CBcrypt/CBcrypt/CBCrypt.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {7AEFCC6A-DD32-4286-9839-5A4765D7E94C} 8 | Library 9 | Properties 10 | Org.CBCrypt 11 | CBCrypt 12 | v4.0 13 | 512 14 | 15 | 16 | true 17 | full 18 | false 19 | bin\Debug\ 20 | DEBUG;TRACE 21 | prompt 22 | 4 23 | 24 | 25 | true 26 | bin\Release\ 27 | TRACE 28 | prompt 29 | 4 30 | 31 | 32 | 33 | ..\packages\BouncyCastle.1.7.0\lib\Net40-Client\BouncyCastle.Crypto.dll 34 | 35 | 36 | ..\packages\SCrypt.2.0.0.2\lib\CryptSharp.SCryptSubset.dll 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 64 | -------------------------------------------------------------------------------- /CBcrypt/CBcrypt/CBCryptKey.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Security.Cryptography; 3 | using Org.BouncyCastle.Crypto; 4 | using Org.BouncyCastle.X509; 5 | using Org.BouncyCastle.Security; 6 | using Org.BouncyCastle.Crypto.Agreement; 7 | 8 | namespace Org.CBCrypt 9 | { 10 | public class CBCryptKey 11 | { 12 | [Obsolete("Use AsymmetricKey and SymmetricKey Instead")] 13 | public AsymmetricCipherKeyPair Key { get { return AsymmetricKey; } set { AsymmetricKey = value; } } 14 | 15 | public AsymmetricCipherKeyPair AsymmetricKey { get; set; } 16 | public byte[] SymmetricKey { get; set; } 17 | 18 | public CBCryptKey(string CBCryptHostId, string username, string password) 19 | { 20 | byte[] highCostSecret = CBCrypt.GenerateHighCostSecret(CBCryptHostId, username, password); 21 | GenerateKeys(highCostSecret); 22 | } 23 | public CBCryptKey(byte[] highCostSecret) 24 | { 25 | GenerateKeys(highCostSecret); 26 | } 27 | 28 | private void GenerateKeys(byte[] highCostSecret) 29 | { 30 | SecureRandom seededPRNG = CBCrypt.GetSeededDigestRandomGenerator(highCostSecret); 31 | this.AsymmetricKey = CBCrypt.GenerateKeyPair(seededPRNG); 32 | this.SymmetricKey = new byte[32]; 33 | seededPRNG.NextBytes(this.SymmetricKey); 34 | } 35 | 36 | public static byte[] GetPublicKeyDerEncoded(AsymmetricCipherKeyPair AsymmetricKey) 37 | { 38 | return SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(AsymmetricKey.Public).GetDerEncoded(); 39 | } 40 | public static byte[] GetSharedSecret(AsymmetricCipherKeyPair localKeyWithPrivate, byte[] remotePublicKeyDerEncoded) 41 | { 42 | var remotePublicKey = PublicKeyFactory.CreateKey(remotePublicKeyDerEncoded); 43 | var agreement = new ECDHBasicAgreement(); 44 | agreement.Init(localKeyWithPrivate.Private); 45 | using (var sha = SHA256.Create()) { 46 | // CalculateAgreement returns a BigInteger, whose length is variable, and bits are not whitened. 47 | // So hash it. 48 | return sha.ComputeHash(agreement.CalculateAgreement(remotePublicKey).ToByteArray()); 49 | } 50 | } 51 | /// 52 | /// Sometimes returns number of bytes != 32 53 | /// 54 | [Obsolete("Used only for backward compatibility with a broken version of CBCrypt")] 55 | public static byte[] GetObsoleteSharedSecret(AsymmetricCipherKeyPair localKeyWithPrivate, byte[] remotePublicKeyDerEncoded) 56 | { 57 | var remotePublicKey = PublicKeyFactory.CreateKey(remotePublicKeyDerEncoded); 58 | var agreement = new ECDHBasicAgreement(); 59 | agreement.Init(localKeyWithPrivate.Private); 60 | return agreement.CalculateAgreement(remotePublicKey).ToByteArray(); 61 | } 62 | 63 | public byte[] GetPublicKeyDerEncoded() 64 | { 65 | return GetPublicKeyDerEncoded(AsymmetricKey); 66 | } 67 | public byte[] GetSharedSecret(byte[] remotePublicKeyDerEncoded) 68 | { 69 | return GetSharedSecret(AsymmetricKey, remotePublicKeyDerEncoded); 70 | } 71 | /// 72 | /// Sometimes returns number of bytes != 32 73 | /// 74 | [Obsolete("Used only for backward compatibility with a broken version of CBCrypt")] 75 | public byte[] GetObsoleteSharedSecret(byte[] remotePublicKeyDerEncoded) 76 | { 77 | return GetObsoleteSharedSecret(AsymmetricKey, remotePublicKeyDerEncoded); 78 | } 79 | 80 | ~CBCryptKey () 81 | { 82 | // Although this finalizer will in many situations be insufficient, I'll still do what I can. 83 | // For example, how about sterilizing the HighCostSecret, or the AsymmetricKey, or anything else? 84 | var bytes = SymmetricKey; 85 | if (bytes != null) { 86 | Array.Clear(bytes, 0, bytes.Length); 87 | } 88 | } 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /CBcrypt/CBcrypt/CBcrypt.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | // using CryptSharp.Utility; // Today, doesn't conflict with bouncycastle. But bouncycastle has an implementation of SCrypt might come out someday 3 | using Org.BouncyCastle.Crypto; 4 | using Org.BouncyCastle.Security; 5 | using Org.BouncyCastle.Crypto.Digests; 6 | using Org.BouncyCastle.Crypto.Generators; 7 | using Org.BouncyCastle.Crypto.Prng; 8 | 9 | namespace Org.CBCrypt 10 | { 11 | public static class CBCrypt 12 | { 13 | /// 14 | /// Applies RateLimitingFunction to the LowCostSecret. Returns a HighCostSecret, dkLength = 32 bytes 15 | /// 16 | /// NOTICE: Zero's out LowCostSecret before returning. 17 | /// 18 | private static byte[] DoRateLimitingFunction(byte[] LowCostSecret) 19 | { 20 | /* cost 4096, blockSize 8, parallel 1, cause SCrypt to take ~175-350ms on Core i5-540M, 2.5Ghz 21 | * This is in addition to the approx 100ms-200ms to generate ECDSA keypair. 22 | */ 23 | const int dkLength = 32; 24 | byte[] retVal = CryptSharp.Utility.SCrypt.ComputeDerivedKey 25 | ( 26 | key: LowCostSecret, // scrypt will transform this into a high cost secret 27 | salt: new byte[16], // zero salt 28 | cost: 4096, // To scale the cost, scale this parameter. Scale is approximately linear. 29 | blockSize: 8, // this is a recommended default by the scrypt authors 30 | parallel: 1, // this is a recommended default by the scrypt authors 31 | maxThreads: null, 32 | derivedKeyLength: dkLength // 32 is surely large enough not to lose any entropy of the user supplied password 33 | ); 34 | Array.Clear(LowCostSecret, 0, LowCostSecret.Length); 35 | return retVal; 36 | } 37 | 38 | /// 39 | /// Returns a seed generated from the parameters. Some day we may implement variants with different hashes, 40 | /// but for now it's hard-coded to use Sha256 returning 32 bytes. 41 | /// 42 | private static byte[] GetLowCostSecret(string CBCryptHostId, string username, string password) 43 | { 44 | if (CBCryptHostId == null) { 45 | throw new ArgumentNullException("CBCryptHostId"); 46 | } 47 | if (username == null) { 48 | throw new ArgumentNullException("username"); 49 | } 50 | if (password == null) { 51 | throw new ArgumentNullException("password"); 52 | } 53 | if (CBCryptHostId.Length < 1) { 54 | throw new ArgumentException("CBCryptHostId must not be blank"); 55 | } 56 | if (username.Length < 1) { 57 | throw new ArgumentException("username must not be blank"); 58 | } 59 | if (password.Length < 1) { 60 | throw new ArgumentException("password must not be blank"); 61 | } 62 | byte[] CBCryptHostIdBytes = System.Text.Encoding.UTF8.GetBytes(CBCryptHostId); 63 | byte[] usernameBytes = System.Text.Encoding.UTF8.GetBytes(username); 64 | byte[] passwordBytes = System.Text.Encoding.UTF8.GetBytes(password); 65 | 66 | /* We want to distill all the inputs down to a single hash, which is unique given the specific set of inputs. 67 | * It is important that we don't get the same hash output, if there's any variation of the inputs - in other words, 68 | * we must be resilient to concatenation. 69 | * 70 | * The two ways readily available were to HMAC each input, in turn using the previous HMAC as the key for the next. Or, 71 | * first hash each input separately and independently of each other, and then hash a concatenation of all the hashes. 72 | * The second is slightly faster, as if that matters. Which is why we're using it. 73 | */ 74 | using (var hashFunction = System.Security.Cryptography.SHA256.Create()) { 75 | // factorHashes : byte array that will contain the concatenated hashes of all the inputFactors 76 | int hashSizeInBytes = hashFunction.HashSize / 8; 77 | const int thisArgc = 3; 78 | var factorHashes = new byte[hashSizeInBytes * thisArgc]; 79 | int factorHashesPos = 0; 80 | byte[] factorHash; 81 | 82 | factorHash = hashFunction.ComputeHash(CBCryptHostIdBytes); 83 | Array.Clear(CBCryptHostIdBytes, 0, CBCryptHostIdBytes.Length); 84 | Array.Copy(factorHash, 0, factorHashes, factorHashesPos, factorHash.Length); 85 | Array.Clear(factorHash, 0, factorHash.Length); 86 | factorHashesPos += hashSizeInBytes; 87 | 88 | factorHash = hashFunction.ComputeHash(usernameBytes); 89 | Array.Clear(usernameBytes, 0, usernameBytes.Length); 90 | Array.Copy(factorHash, 0, factorHashes, factorHashesPos, factorHash.Length); 91 | Array.Clear(factorHash, 0, factorHash.Length); 92 | factorHashesPos += hashSizeInBytes; 93 | 94 | factorHash = hashFunction.ComputeHash(passwordBytes); 95 | Array.Clear(passwordBytes, 0, passwordBytes.Length); 96 | Array.Copy(factorHash, 0, factorHashes, factorHashesPos, factorHash.Length); 97 | Array.Clear(factorHash, 0, factorHash.Length); 98 | // factorHashesPos += hashSizeInBytes; // this is actually unnecessary cuz it's the last one 99 | 100 | byte[] output = hashFunction.ComputeHash(factorHashes); 101 | Array.Clear(factorHashes, 0, factorHashes.Length); 102 | return output; 103 | } 104 | } 105 | 106 | /// 107 | /// Returns seeded PRNG 108 | /// Someday, we might want to add more variants on digests. But for now, Sha256 is the only option. 109 | /// 110 | public static SecureRandom GetSeededDigestRandomGenerator(byte[] seed) 111 | { 112 | var prng = new DigestRandomGenerator(new Sha256Digest()); 113 | prng.AddSeedMaterial(seed); 114 | return new SecureRandom(prng); 115 | } 116 | 117 | /// 118 | /// Returns the ECDH/256 keypair derived from the parameters. 119 | /// 120 | public static AsymmetricCipherKeyPair GenerateKeyPair(string CBCryptHostId, string username, string password) 121 | { 122 | byte[] highCostSecret = GenerateHighCostSecret(CBCryptHostId, username, password); 123 | return GenerateKeyPair(highCostSecret); 124 | } 125 | /// 126 | /// Returns the ECDH/256 keypair derived from the HighCostSecret 127 | /// This allows a client to save HighCostSecret, and regenerate the key at a later time without asking user for password 128 | /// 129 | public static AsymmetricCipherKeyPair GenerateKeyPair(byte[] HighCostSecret) 130 | { 131 | SecureRandom seededPRNG = GetSeededDigestRandomGenerator(HighCostSecret); 132 | return GenerateKeyPair(seededPRNG); 133 | } 134 | 135 | public static AsymmetricCipherKeyPair GenerateKeyPair(SecureRandom seededPRNG) 136 | { 137 | // Algorithm possibilities: "EC", "ECDSA", "ECDH", "ECDHC", "ECGOST3410", "ECMQV" 138 | // Default if none specified: "EC" 139 | var ec = new ECKeyPairGenerator("ECDH"); 140 | // strength parameters: 192, 224, 239, 256, 384, 521 141 | var keyGenParams = new KeyGenerationParameters(seededPRNG, 256); 142 | ec.Init(keyGenParams); 143 | 144 | return ec.GenerateKeyPair(); 145 | } 146 | /// 147 | /// Returns the HighCostSecret derived from the parameters 148 | /// This allows a client to save HighCostSecret, and regenerate the key at a later time without asking user for password 149 | /// 150 | public static byte[] GenerateHighCostSecret(string CBCryptHostId, string username, string password) 151 | { 152 | byte[] lowCostSecret = GetLowCostSecret(CBCryptHostId, username, password); 153 | byte[] highCostSecret = DoRateLimitingFunction(lowCostSecret); 154 | return highCostSecret; 155 | } 156 | } 157 | } 158 | -------------------------------------------------------------------------------- /CBcrypt/CBcrypt/Challenge.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Org.CBCrypt 4 | { 5 | public class Challenge 6 | { 7 | private const int ChallengeSize = 32; 8 | private const int tempKeySize = 32; 9 | private CBCryptKey ServerEphemeralKey; 10 | public byte[] ChallengeBytes { get; set; } 11 | public string CBCryptHostId { get; set; } 12 | public byte[] ServerPublicKeyDerEncoded { get; set; } 13 | 14 | public Challenge() 15 | { 16 | // Empty constructor is requirement for deserialization 17 | } 18 | public Challenge(string CBCryptHostId) 19 | { 20 | this.CBCryptHostId = CBCryptHostId; 21 | this.ChallengeBytes = new byte[ChallengeSize]; 22 | // The easiest way for me to generate an ephemeral key is to feed random bytes into CBCrypt.GenerateKeyPair 23 | var tempKey = new byte[tempKeySize]; 24 | using (var rng = new System.Security.Cryptography.RNGCryptoServiceProvider()) { 25 | rng.GetBytes(this.ChallengeBytes); 26 | rng.GetBytes(tempKey); 27 | } 28 | this.ServerEphemeralKey = new CBCryptKey(tempKey); 29 | this.ServerPublicKeyDerEncoded = this.ServerEphemeralKey.GetPublicKeyDerEncoded(); 30 | } 31 | 32 | public byte[] GetServerPublicDer() 33 | { 34 | return this.ServerEphemeralKey.GetPublicKeyDerEncoded(); 35 | } 36 | public static byte[] GenerateChallengeResponseBytes(byte[] challenge, byte[] sharedSecret) 37 | { 38 | using (var hmac = new System.Security.Cryptography.HMACSHA256(sharedSecret)) { 39 | return hmac.ComputeHash(challenge); 40 | } 41 | } 42 | public bool TryValidateChallengeResponse(ChallengeResponse response) 43 | { 44 | byte[] sharedSecret = this.ServerEphemeralKey.GetSharedSecret(response.PublicKeyDerEncoded); 45 | byte[] challengeResponseCheck = GenerateChallengeResponseBytes(this.ChallengeBytes, sharedSecret); 46 | 47 | // Verify that the challengeResponse matches challengeResponseCheck. Otherwise the client auth has failed. 48 | if (response.ChallengeResponseBytes == null || (response.ChallengeResponseBytes.Length != challengeResponseCheck.Length)) { 49 | return false; 50 | } 51 | for (int i = 0; i < challengeResponseCheck.Length; i++) { 52 | if (response.ChallengeResponseBytes[i] != challengeResponseCheck[i]) { 53 | return false; 54 | } 55 | } 56 | return true; 57 | } 58 | 59 | /// 60 | /// Throws CryptographicException if ObsoleteSharedSecret length != 32 61 | /// 62 | [Obsolete("Used only for backward compatibility with a broken version of CBCrypt")] 63 | public bool TryObsoleteValidateChallengeResponse(ChallengeResponse response) 64 | { 65 | byte[] sharedSecret = this.ServerEphemeralKey.GetObsoleteSharedSecret(response.PublicKeyDerEncoded); 66 | byte[] challengeResponseCheck = GenerateChallengeResponseBytes(this.ChallengeBytes, sharedSecret); 67 | 68 | // Verify that the challengeResponse matches challengeResponseCheck. Otherwise the client auth has failed. 69 | if (response.ChallengeResponseBytes == null || (response.ChallengeResponseBytes.Length != challengeResponseCheck.Length)) { 70 | return false; 71 | } 72 | for (int i = 0; i < challengeResponseCheck.Length; i++) { 73 | if (response.ChallengeResponseBytes[i] != challengeResponseCheck[i]) { 74 | return false; 75 | } 76 | } 77 | return true; 78 | } 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /CBcrypt/CBcrypt/ChallengeResponse.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Org.CBCrypt 4 | { 5 | public class ChallengeResponse 6 | { 7 | public byte[] PublicKeyDerEncoded { get; set; } 8 | public byte[] ChallengeResponseBytes { get; set; } 9 | 10 | public ChallengeResponse() 11 | { 12 | // Empty constructor is requirement for deserialization 13 | } 14 | public ChallengeResponse(CBCryptKey clientKey, Challenge ChallengeFromServer) 15 | { 16 | this.PublicKeyDerEncoded = clientKey.GetPublicKeyDerEncoded(); 17 | byte[] sharedSecret = clientKey.GetSharedSecret(ChallengeFromServer.ServerPublicKeyDerEncoded); 18 | this.ChallengeResponseBytes = Challenge.GenerateChallengeResponseBytes(ChallengeFromServer.ChallengeBytes,sharedSecret); 19 | } 20 | 21 | /// 22 | /// GetObsoleteChallengeResponse exists solely for backward compatibility, for clients to connect to servers running 23 | /// CBCrypt 1.0.5.0 or lower. 24 | /// 25 | [Obsolete] 26 | public static ChallengeResponse GetObsoleteChallengeResponse(CBCryptKey clientKey, Challenge challengeFromServer) 27 | { 28 | var response = new ChallengeResponse(); 29 | response.PublicKeyDerEncoded = clientKey.GetPublicKeyDerEncoded(); 30 | byte[] obsoleteSharedSecret = clientKey.GetObsoleteSharedSecret(challengeFromServer.ServerPublicKeyDerEncoded); 31 | response.ChallengeResponseBytes = Challenge.GenerateChallengeResponseBytes(challengeFromServer.ChallengeBytes, obsoleteSharedSecret); 32 | return response; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /CBcrypt/CBcrypt/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("CBCrypt")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("CBCrypt")] 13 | [assembly: AssemblyCopyright("Copyright © 2014")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("5514a466-d0cb-40f6-8528-ab8bce243267")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.6.3")] 36 | [assembly: AssemblyFileVersion("1.0.6.3")] 37 | -------------------------------------------------------------------------------- /CBcrypt/CBcrypt/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /CBcrypt/NUnitTest/NUnitTest.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Debug 5 | AnyCPU 6 | {4FE62D52-99B6-4EFB-9C53-71DEE771569A} 7 | Library 8 | NUnitTest 9 | NUnitTest 10 | 11 | 12 | true 13 | full 14 | false 15 | bin\Debug 16 | DEBUG;TRACE 17 | prompt 18 | 4 19 | false 20 | 21 | 22 | true 23 | bin\Release 24 | prompt 25 | 4 26 | TRACE 27 | false 28 | 29 | 30 | 31 | False 32 | ..\packages\Newtonsoft.Json.6.0.8\lib\net40\Newtonsoft.Json.dll 33 | 34 | 35 | ..\packages\NUnit.2.6.3\lib\nunit.framework.dll 36 | 37 | 38 | 39 | ..\packages\SCrypt.2.0.0.2\lib\CryptSharp.SCryptSubset.dll 40 | 41 | 42 | ..\packages\BouncyCastle.1.7.0\lib\Net40-Client\BouncyCastle.Crypto.dll 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | {7AEFCC6A-DD32-4286-9839-5A4765D7E94C} 53 | CBCrypt 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /CBcrypt/NUnitTest/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("CBCrypt_NUnitTest")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("NUnitTest.Properties")] 13 | [assembly: AssemblyCopyright("Copyright © 2014")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("25ff193f-9957-4766-ad6f-67ade2776925")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | [assembly: AssemblyVersion("1.0.0.0")] 33 | [assembly: AssemblyFileVersion("1.0.0.0")] 34 | -------------------------------------------------------------------------------- /CBcrypt/NUnitTest/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Documentation/Block_Diagram.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/Block_Diagram.gif -------------------------------------------------------------------------------- /Documentation/CBCrypt Presentation.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/CBCrypt Presentation.pptx -------------------------------------------------------------------------------- /Documentation/CBCrypt.chm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/CBCrypt.chm -------------------------------------------------------------------------------- /Documentation/html/CloseSearch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/CloseSearch.png -------------------------------------------------------------------------------- /Documentation/html/CollapseAll.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/CollapseAll.bmp -------------------------------------------------------------------------------- /Documentation/html/Collapsed.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/Collapsed.gif -------------------------------------------------------------------------------- /Documentation/html/ExpandAll.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/ExpandAll.bmp -------------------------------------------------------------------------------- /Documentation/html/Expanded.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/Expanded.gif -------------------------------------------------------------------------------- /Documentation/html/FillNode.aspx: -------------------------------------------------------------------------------- 1 | <%@ Page Language="C#" EnableViewState="False" %> 2 | 3 | 91 | -------------------------------------------------------------------------------- /Documentation/html/FillNode.php: -------------------------------------------------------------------------------- 1 | load('WebTOC.xml'); 7 | $xpath = new DOMXPath($toc); 8 | $id = $_GET["Id"]; 9 | $nodes = $xpath->query("//HelpTOCNode[@Id='$id']/*"); 10 | if ($nodes->length == 0) 11 | { 12 | ?> 13 | TOC node not found! 14 | getAttribute("Id"); 20 | $url = $node->getAttribute("Url"); 21 | $title = $node->getAttribute("Title"); 22 | if (empty($url)) 23 | { 24 | $url = "#"; 25 | $target = ""; 26 | } 27 | else 28 | { 29 | $target = " target=\"TopicContent\""; 30 | } 31 | 32 | if ($node->hasChildNodes()) 33 | { 34 | ?> 35 |
36 | 37 | > 38 | 39 |
40 | 45 |
46 | 47 | > 48 |
49 | -------------------------------------------------------------------------------- /Documentation/html/Index.aspx: -------------------------------------------------------------------------------- 1 | <%@ Page Language="C#" EnableViewState="False" %> 2 | 3 | 4 | 5 | 6 | 7 | CBCrypt - Table of Content 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 |
17 | 18 | 27 | 28 | 33 | 34 | 49 | 50 | 53 | 54 | 57 | 58 |
59 | 60 |
61 | 62 |
63 | 64 |
65 | 66 | 69 | 70 |
71 | 72 | 73 | 74 | 75 | 76 | 158 | -------------------------------------------------------------------------------- /Documentation/html/Index.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/Index.gif -------------------------------------------------------------------------------- /Documentation/html/Item.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/Item.gif -------------------------------------------------------------------------------- /Documentation/html/LoadIndexKeywords.aspx: -------------------------------------------------------------------------------- 1 | <%@ Page Language="C#" EnableViewState="False" %> 2 | 3 | 103 | -------------------------------------------------------------------------------- /Documentation/html/LoadIndexKeywords.php: -------------------------------------------------------------------------------- 1 | load("WebKI.xml"); 6 | $xpath = new DOMXPath($ki); 7 | $nodes = $xpath->query("/HelpKI/*"); 8 | $startIndexParam = $_GET["StartIndex"]; 9 | $startIndex = 0; 10 | if (!empty($startIndexParam)) 11 | $startIndex = intval($startIndexParam) * 128; 12 | $endIndex = $startIndex + 128; 13 | 14 | if ($endIndex > $nodes->length) 15 | $endIndex = $nodes->length; 16 | 17 | if($startIndex > 0) 18 | { 19 | ?> 20 |
21 |  << Previous page 22 |
23 | item($startIndex); 29 | $url = $node->getAttribute("Url"); 30 | $title = $node->getAttribute("Title"); 31 | $target = " target=\"TopicContent\""; 32 | 33 | if (empty($url)) 34 | { 35 | $url = "#"; 36 | $target = ""; 37 | } 38 | ?> 39 |
40 |  > 41 | query("./HelpKINode", $node); 43 | foreach($subNodes as $subNode) 44 | { 45 | $subUrl = $subNode->getAttribute("Url"); 46 | $subTitle = $subNode->getAttribute("Title"); 47 | ?> 48 |
49 | 50 |
51 | 52 | 55 |
56 | length) 61 | { 62 | ?> 63 |
64 |  Next page >> 65 |
66 | -------------------------------------------------------------------------------- /Documentation/html/Search.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/Search.gif -------------------------------------------------------------------------------- /Documentation/html/SearchHelp.inc.php: -------------------------------------------------------------------------------- 1 | filename = $file; 13 | $this->pageTitle = $title; 14 | $this->rank = $rank; 15 | } 16 | } 17 | 18 | 19 | /// 20 | /// Split the search text up into keywords 21 | /// 22 | /// The keywords to parse 23 | /// A list containing the words for which to search 24 | function ParseKeywords($keywords) 25 | { 26 | $keywordList = array(); 27 | $words = preg_split("/[^\w]+/", $keywords); 28 | 29 | foreach($words as $word) 30 | { 31 | $checkWord = strtolower($word); 32 | $first = substr($checkWord, 0, 1); 33 | if(strlen($checkWord) > 2 && !ctype_digit($first) && !in_array($checkWord, $keywordList)) 34 | { 35 | array_push($keywordList, $checkWord); 36 | } 37 | } 38 | 39 | return $keywordList; 40 | } 41 | 42 | 43 | /// 44 | /// Search for the specified keywords and return the results as a block of 45 | /// HTML. 46 | /// 47 | /// The keywords for which to search 48 | /// The file list 49 | /// The dictionary used to find the words 50 | /// True to sort by title, false to sort by 51 | /// ranking 52 | /// A block of HTML representing the search results. 53 | function Search($keywords, $fileInfo, $wordDictionary, $sortByTitle) 54 | { 55 | $sb = ""; 56 | $matches = array(); 57 | $matchingFileIndices = array(); 58 | $rankings = array(); 59 | 60 | $isFirst = true; 61 | 62 | foreach($keywords as $word) 63 | { 64 | if (!array_key_exists($word, $wordDictionary)) 65 | { 66 | return "Nothing found"; 67 | } 68 | $occurrences = $wordDictionary[$word]; 69 | 70 | $matches[$word] = $occurrences; 71 | $occurrenceIndices = array(); 72 | 73 | // Get a list of the file indices for this match 74 | foreach($occurrences as $entry) 75 | array_push($occurrenceIndices, ($entry >> 16)); 76 | 77 | if($isFirst) 78 | { 79 | $isFirst = false; 80 | foreach($occurrenceIndices as $i) 81 | { 82 | array_push($matchingFileIndices, $i); 83 | } 84 | } 85 | else 86 | { 87 | // After the first match, remove files that do not appear for 88 | // all found keywords. 89 | for($idx = 0; $idx < count($matchingFileIndices); $idx++) 90 | { 91 | if (!in_array($matchingFileIndices[$idx], $occurrenceIndices)) 92 | { 93 | array_splice($matchingFileIndices, $idx, 1); 94 | $idx--; 95 | } 96 | } 97 | } 98 | } 99 | 100 | if(count($matchingFileIndices) == 0) 101 | { 102 | return "Nothing found"; 103 | } 104 | 105 | // Rank the files based on the number of times the words occurs 106 | foreach($matchingFileIndices as $index) 107 | { 108 | // Split out the title, filename, and word count 109 | $fileIndex = explode("\x00", $fileInfo[$index]); 110 | 111 | $title = $fileIndex[0]; 112 | $filename = $fileIndex[1]; 113 | $wordCount = intval($fileIndex[2]); 114 | $matchCount = 0; 115 | 116 | foreach($keywords as $words) 117 | { 118 | $occurrences = $matches[$word]; 119 | 120 | foreach($occurrences as $entry) 121 | { 122 | if(($entry >> 16) == $index) 123 | $matchCount += $entry & 0xFFFF; 124 | } 125 | } 126 | 127 | $r = new Ranking($filename, $title, $matchCount * 1000 / $wordCount); 128 | array_push($rankings, $r); 129 | } 130 | 131 | // Sort by rank in descending order or by page title in ascending order 132 | if($sortByTitle) 133 | { 134 | usort($rankings, "cmprankbytitle"); 135 | } 136 | else 137 | { 138 | usort($rankings, "cmprank"); 139 | } 140 | 141 | // Format the file list and return the results 142 | foreach($rankings as $r) 143 | { 144 | $f = $r->filename; 145 | $t = $r->pageTitle; 146 | $sb .= "
\r\n" . 147 | "" . 149 | "$t\r\n
\r\n"; 150 | } 151 | 152 | // Return the keywords used as well in a hidden span 153 | $k = implode(" ", $keywords); 154 | $sb .= "$k"; 155 | 156 | return $sb; 157 | } 158 | 159 | function cmprank($x, $y) 160 | { 161 | return $y->rank - $x->rank; 162 | } 163 | 164 | function cmprankbytitle($x, $y) 165 | { 166 | return strcmp($x->pageTitle, $y->pageTitle); 167 | } 168 | 169 | ?> -------------------------------------------------------------------------------- /Documentation/html/SearchHelp.php: -------------------------------------------------------------------------------- 1 |  14 | Nothing found 15 | $val) 48 | { 49 | $wordDictionary[$ftiWord] = $val; 50 | } 51 | } 52 | } 53 | } 54 | 55 | // Perform the search and return the results as a block of HTML 56 | $results = Search($keywords, $fileList, $wordDictionary, $sortByTitle); 57 | echo $results; 58 | ?> -------------------------------------------------------------------------------- /Documentation/html/Splitter.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/Splitter.gif -------------------------------------------------------------------------------- /Documentation/html/SyncTOC.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/SyncTOC.gif -------------------------------------------------------------------------------- /Documentation/html/TOC.css: -------------------------------------------------------------------------------- 1 | /* File : TOC.css 2 | // Author : Eric Woodruff (Eric@EWoodruff.us) 3 | // Updated : 09/07/2007 4 | // 5 | // Stylesheet for the table of content 6 | */ 7 | 8 | * 9 | { 10 | margin: 0px 0px 0px 0px; 11 | padding: 0px 0px 0px 0px; 12 | } 13 | 14 | body 15 | { 16 | font-family: verdana, arial, sans-serif; 17 | font-size: 8.5pt; 18 | background-color: #6699CC; 19 | color: White; 20 | overflow: hidden; 21 | } 22 | 23 | input 24 | { 25 | font-size: 8.5pt; 26 | } 27 | 28 | img 29 | { 30 | border: 0; 31 | margin-left: 5px; 32 | margin-right: 2px; 33 | } 34 | 35 | img.TreeNodeImg 36 | { 37 | cursor: pointer; 38 | } 39 | 40 | img.TOCLink 41 | { 42 | cursor: pointer; 43 | margin-left: 0; 44 | margin-right: 0; 45 | } 46 | 47 | a.SelectedNode, a.UnselectedNode 48 | { 49 | color: black; 50 | text-decoration: none; 51 | padding: 1px 3px 1px 3px; 52 | white-space: nowrap; 53 | } 54 | 55 | a.SelectedNode 56 | { 57 | background-color: #ffffff; 58 | border: solid 1px #999999; 59 | padding: 0px 2px 0px 2px; 60 | } 61 | 62 | a.UnselectedNode:hover, a.SelectedNode:hover 63 | { 64 | background-color: #cccccc; 65 | border: solid 1px #999999; 66 | padding: 0px 2px 0px 2px; 67 | } 68 | 69 | .Visible 70 | { 71 | display: block; 72 | margin-left: 2em; 73 | } 74 | 75 | .Hidden 76 | { 77 | display: none; 78 | } 79 | 80 | .Tree 81 | { 82 | background-color: #f0f0f0; 83 | color: Black; 84 | width: 300px; 85 | overflow: auto; 86 | } 87 | 88 | .TreeNode, .TreeItem 89 | { 90 | white-space: nowrap; 91 | margin: 2px 2px 2px 2px; 92 | } 93 | 94 | .TOCDiv 95 | { 96 | position: relative; 97 | float: left; 98 | width: 300px; 99 | height: 100%; 100 | } 101 | 102 | .TOCSizer 103 | { 104 | clear: none; 105 | float: left; 106 | width: 10px; 107 | height: 100%; 108 | background-color: #6699CC; 109 | background-image: url("Splitter.gif"); 110 | background-position:center center; 111 | background-repeat:no-repeat; 112 | position: relative; 113 | cursor: w-resize; 114 | } 115 | 116 | .TopicContent 117 | { 118 | position: relative; 119 | float: right; 120 | background-color: white; 121 | height: 100%; 122 | } 123 | 124 | .SearchOpts 125 | { 126 | padding: 5px 5px 0px 5px; 127 | background-color: lightgrey; 128 | color: black; 129 | width: 300px; 130 | } 131 | 132 | .NavOpts 133 | { 134 | padding: 5px 5px 0px 5px; 135 | background-color: lightgrey; 136 | color: black; 137 | width: 300px; 138 | } 139 | 140 | .IndexOpts 141 | { 142 | padding: 5px 5px 0px 5px; 143 | background-color: lightgrey; 144 | color: black; 145 | width: 300px; 146 | } 147 | 148 | .IndexItem 149 | { 150 | white-space: nowrap; 151 | margin: 2px 2px 2px 2px; 152 | } 153 | 154 | .IndexSubItem 155 | { 156 | white-space: nowrap; 157 | margin: 2px 2px 2px 12px; 158 | } 159 | 160 | .PaddedText 161 | { 162 | margin: 10px 10px 10px 10px; 163 | } 164 | -------------------------------------------------------------------------------- /Documentation/html/Web.Config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /Documentation/html/WebKI.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /Documentation/html/WebTOC.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /Documentation/html/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/favicon.ico -------------------------------------------------------------------------------- /Documentation/html/fti/FTI_100.json: -------------------------------------------------------------------------------- 1 | {"description":[3,131075,196609,458753,524289,655361,720897,786433,1572865,1638401,1966081,2097153,2424833,2490371,2555905,2621441],"determines":[1,131073,458753,720897,1572865,2490369],"dll":[65537,262145,327681,393217,589825,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1703937,1769473,1835009,1900545,2031617,2162689,2228225,2293761,2359297],"derived":[655362,1179649,1703937,1966083,2359297,2621443]} -------------------------------------------------------------------------------- /Documentation/html/fti/FTI_101.json: -------------------------------------------------------------------------------- 1 | {"exposes":[1,131073,196609,458753,720897,786433,1572865,1966081,2097153,2490369,2621441],"equals":[1,131073,458753,720897,1572865,2490369],"equal":[1,131073,458753,720897,1572865,2490369],"ecdh":[655362,1703937,1966082,2359297,2621442]} -------------------------------------------------------------------------------- /Documentation/html/fti/FTI_102.json: -------------------------------------------------------------------------------- 1 | {"following":[1,131073,196609,458753,720897,786433,1572865,1966081,2097153,2490369,2621441],"finalize":[1,131073,458753,720897,1572865,2490369],"free":[1,131073,458753,720897,1572865,2490369],"function":[1,131073,458753,720897,983041,1179649,1245185,1310721,1441793,1572865,1703937,1835009,1900545,2228225,2359297,2490369],"file":[1,65537,131073,196609,262145,327681,393217,458753,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441]} -------------------------------------------------------------------------------- /Documentation/html/fti/FTI_103.json: -------------------------------------------------------------------------------- 1 | {"garbage":[1,131073,458753,720897,1572865,2490369],"gethashcode":[1,131073,458753,720897,1572865,2490369],"gettype":[1,131073,458753,720897,1572865,2490369],"gets":[1,131073,458753,720897,1572865,2490369],"generated":[1,65537,131073,196609,262145,327681,393217,458753,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441],"ghostdoc":[1,65537,131073,196609,262145,327681,393217,458753,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441],"getpublickeyderencoded":[131074,983045,1441797,1572866,2424835],"getsharedsecret":[131074,1572866,1638403,1835013,1900549],"generatekeypair":[655363,1703941,1966082,2359301,2621442],"generatechallengeresponsebytes":[720897,1310724,2490369],"getserverpublicder":[720897,2228228,2490369],"generatehighcostsecret":[1179652,1966081,2621441]} -------------------------------------------------------------------------------- /Documentation/html/fti/FTI_104.json: -------------------------------------------------------------------------------- 1 | {"hash":[1,131073,458753,720897,1572865,2490369],"help":[1,65537,131073,196609,262145,327681,393217,458753,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441],"hierarchy":[262145,327681,851969,1114113],"highcostsecret":[655362,1179650,1703942,1966084,2293764,2621444]} -------------------------------------------------------------------------------- /Documentation/html/fti/FTI_105.json: -------------------------------------------------------------------------------- 1 | {"inherited":[6,131078,458758,720902,1572870,2490374],"instance":[1,131073,458753,720897,1572865,2490369],"inheritance":[262145,327681,851969,1114113]} -------------------------------------------------------------------------------- /Documentation/html/fti/FTI_107.json: -------------------------------------------------------------------------------- 1 | {"key":[65540,131073,655361,786433,1179649,1441796,1507332,1703937,1966082,2621442],"keypair":[655362,1703937,1966082,2359297,2621442]} -------------------------------------------------------------------------------- /Documentation/html/fti/FTI_108.json: -------------------------------------------------------------------------------- 1 | {"list":[655361,1638401,2424833,2555905],"localkeywithprivate":[1900548]} -------------------------------------------------------------------------------- /Documentation/html/fti/FTI_109.json: -------------------------------------------------------------------------------- 1 | {"members":[2,131074,196609,262145,327681,458753,655361,720897,786433,851969,1114113,1572865,1638401,1966081,2097153,2424833,2490370,2555905,2621442],"methods":[1,131073,458754,720898,1572866,1966082,2490369,2621441],"memberwiseclone":[1,131073,458753,720897,1572865,2490369],"method":[655361,983041,1179649,1245185,1310721,1441793,1638401,1703937,1835009,1900545,2228225,2359297,2424833]} -------------------------------------------------------------------------------- /Documentation/html/fti/FTI_110.json: -------------------------------------------------------------------------------- 1 | {"namespace":[1,65538,131073,196609,262146,327682,393218,458753,524289,589826,655361,720897,786433,851970,917506,983042,1048578,1114114,1179650,1245186,1310722,1376258,1441794,1507330,1572865,1638401,1703938,1769474,1835010,1900546,1966081,2031618,2097153,2162690,2228226,2293762,2359298,2424833,2490369,2555905,2621441],"new":[65537,393217,1048577,1376257,2293761],"notinheritable":[851969]} -------------------------------------------------------------------------------- /Documentation/html/fti/FTI_111.json: -------------------------------------------------------------------------------- 1 | {"object":[12,131084,262145,327681,458764,720908,851969,1114113,1572876,2490380],"operations":[1,131073,458753,720897,1572865,2490369],"org":[1,65538,131073,196609,262147,327683,393220,458753,524289,589826,655361,720897,786433,851971,917506,983042,1048578,1114115,1179650,1245187,1310722,1376258,1441794,1507330,1572865,1638401,1703938,1769474,1835010,1900546,1966081,2031618,2097153,2162690,2228226,2293762,2359298,2424833,2490369,2555905,2621441],"overload":[65537,655361,983041,1048577,1441793,1638401,1703937,1835009,1900545,2293761,2359297,2424833,2555905]} -------------------------------------------------------------------------------- /Documentation/html/fti/FTI_112.json: -------------------------------------------------------------------------------- 1 | {"perform":[1,131073,458753,720897,1572865,2490369],"particular":[1,131073,458753,720897,1572865,2490369],"properties":[1,131073,196610,786434,2097154,2490369],"publickeyderencoded":[1,196609,2162692],"public":[65539,262147,327683,393219,589827,851971,917507,983043,1048579,1114115,1179651,1245187,1310723,1376259,1441795,1507331,1703939,1769475,1835011,1900547,2031619,2162691,2228227,2293763,2359299],"parameters":[65537,393217,655361,1048577,1179650,1245185,1310721,1376257,1441793,1703937,1835009,1900545,1966082,2293761,2359298,2621442],"property":[589827,917507,1507331,1769475,2031619,2162691],"password":[655361,1048580,1179653,1703937,1966082,2359300,2621442]} -------------------------------------------------------------------------------- /Documentation/html/fti/FTI_114.json: -------------------------------------------------------------------------------- 1 | {"resources":[1,131073,458753,720897,1572865,2490369],"reclaimed":[1,131073,458753,720897,1572865,2490369],"returns":[1,131073,458753,655362,720897,1179649,1572865,1703937,1966083,2359297,2490369,2621443],"represents":[1,131073,458753,720897,1572865,2490369],"ref":[262145,327681,851969,1114113],"regenerate":[655361,1179649,1703937,1966082,2621442],"response":[1245188],"remotepublickeyderencoded":[1835012,1900548]} -------------------------------------------------------------------------------- /Documentation/html/fti/FTI_115.json: -------------------------------------------------------------------------------- 1 | {"system":[11,131083,262145,327681,458763,589829,720907,851969,917509,983043,1048585,1114113,1179660,1245185,1310731,1376259,1441795,1572875,1703940,1769477,1835015,1900551,2031620,2162693,2228227,2293764,2359305,2490379],"specified":[1,131073,458753,720897,1572865,2490369],"serves":[1,131073,458753,720897,1572865,2490369],"shallow":[1,131073,458753,720897,1572865,2490369],"string":[1,131076,458753,655363,720897,1048591,1179660,1376260,1572865,1966083,2031621,2359311,2490369,2555907,2621443],"syntax":[65537,262145,327681,393217,589825,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1703937,1769473,1835009,1900545,2031617,2162689,2228225,2293761,2359297],"sub":[65537,393217,1048577,1376257,2293761],"set":[589827,917507,1507331,1769475,2031619,2162691],"save":[655361,1179649,1703937,1966082,2621442],"static":[851969,1179650,1310722,1441794,1703938,1900546,2359298],"sealed":[851969],"serverpublickeyderencoded":[917508,2097153,2490369],"shared":[1179649,1310721,1441793,1703937,1900545,2359297],"sharedsecret":[1310724]} -------------------------------------------------------------------------------- /Documentation/html/fti/FTI_116.json: -------------------------------------------------------------------------------- 1 | {"type":[3,65537,131075,196609,393218,458755,720899,786433,1048579,1179651,1245185,1310722,1376257,1441793,1572867,1703937,1835009,1900546,1966081,2097153,2293761,2359299,2490371,2621441],"try":[1,131073,458753,720897,1572865,2490369],"tostring":[1,131073,458753,720897,1572865,2490369],"time":[655361,1179649,1703937,1966082,2621442],"tryvalidatechallengeresponse":[720897,1245188,2490369]} -------------------------------------------------------------------------------- /Documentation/html/fti/FTI_117.json: -------------------------------------------------------------------------------- 1 | {"user":[655361,1179649,1703937,1966082,2621442],"username":[1048580,1179652,2359300]} -------------------------------------------------------------------------------- /Documentation/html/fti/FTI_118.json: -------------------------------------------------------------------------------- 1 | {"void":[589825,917505,1507329,1769473,2031617,2162689],"value":[589825,917505,1507329,1769473,2031617,2162689]} -------------------------------------------------------------------------------- /Documentation/html/fti/FTI_97.json: -------------------------------------------------------------------------------- 1 | {"allows":[1,131073,458753,655361,720897,1179649,1572865,1703937,1966082,2490369,2621442],"asymmetriccipherkeypair":[65541,131075,1441797,1507333,1572866,1638401,1703939,1900549,2359299,2424833,2555905],"assembly":[65537,262145,327681,393217,589825,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1703937,1769473,1835009,1900545,2031617,2162689,2228225,2293761,2359297],"array":[131078,589832,655362,917512,983044,1179652,1310736,1441796,1572868,1638404,1703942,1769480,1835018,1900554,1966082,2162696,2228228,2293766,2555906,2621442],"asking":[655361,1179649,1703937,1966082,2621442],"abstract":[851969]} -------------------------------------------------------------------------------- /Documentation/html/fti/FTI_98.json: -------------------------------------------------------------------------------- 1 | {"bool":[1245186],"boolean":[1245185]} -------------------------------------------------------------------------------- /Documentation/html/fti/FTI_99.json: -------------------------------------------------------------------------------- 1 | {"challengeresponse":[4,196611,393220,458755,524289,1114118,1245188,1769474,2162690],"constructors":[1,131073,2490369],"current":[4,131076,458756,720900,1572868,2490372],"cleanup":[1,131073,458753,720897,1572865,2490369],"collection":[1,131073,458753,720897,1572865,2490369],"creates":[1,131073,458753,720897,1572865,2490369],"copy":[1,131073,458753,720897,1572865,2490369],"challengeresponsebytes":[1,196609,1769476],"class":[1,65537,131073,196609,262148,327684,393217,458753,524289,589825,655361,720897,786433,851972,917505,983041,1048577,1114116,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441],"cbcrypt":[1,65540,131073,196609,262149,327685,393222,458753,524290,589828,655364,720897,786433,851979,917508,983044,1048580,1114117,1179654,1245189,1310724,1376260,1441796,1507332,1572865,1638401,1703942,1769476,1835012,1900548,1966084,2031620,2097153,2162692,2228228,2293764,2359302,2424833,2490369,2555905,2621444],"cbcryptkey":[65541,131078,327686,393220,524289,786435,983042,1048581,1441794,1507330,1572867,1638403,1835010,1900546,2293765,2424835,2555910],"constructor":[65537,393217,1048577,1376257,2293761,2555905],"challenge":[262150,393220,524289,589826,720899,917506,1245186,1310726,1376260,2031618,2097155,2228226,2490372],"clientkey":[393220],"challengefromserver":[393220],"classes":[524289],"challengebytes":[589828,2097153,2490369],"client":[655361,1179649,1703937,1966082,2621442],"cbcrypthostid":[1048580,1179652,1376260,2031620,2097153,2359300,2490369]} -------------------------------------------------------------------------------- /Documentation/html/fti/FTI_Files.json: -------------------------------------------------------------------------------- 1 | ["ChallengeResponse Members\u0000104880745.htm\u0000168","CBCryptKey Constructor (AsymmetricCipherKeyPair)\u00001050510383.htm\u000077","CBCryptKey Members\u00001163784371.htm\u0000256","ChallengeResponse Properties\u00001369563518.htm\u000029","Challenge Class\u00001415551336.htm\u000063","CBCryptKey Class\u00001441647171.htm\u000063","ChallengeResponse Constructor\u00001494598437.htm\u0000118","ChallengeResponse Methods\u0000151453034.htm\u0000159","Org.CBCrypt Namespace\u00001514855079.htm\u000017","ChallengeBytes Property\u00001534636348.htm\u0000124","GenerateKeyPair Method\u00001564874448.htm\u0000102","Challenge Methods\u00001581038909.htm\u0000162","CBCryptKey Properties\u00001581295153.htm\u000028","CBCrypt Class\u00001718333260.htm\u000067","ServerPublicKeyDerEncoded Property\u00001734766934.htm\u0000124","GetPublicKeyDerEncoded Method\u00001750187521.htm\u000084","CBCryptKey Constructor (String, String, String)\u00001882239146.htm\u0000130","ChallengeResponse Class\u00001888296670.htm\u000063","GenerateHighCostSecret Method\u00001905304697.htm\u0000184","TryValidateChallengeResponse Method\u00001917065220.htm\u0000104","GenerateChallengeResponseBytes Method\u00001948183430.htm\u0000188","Challenge Constructor\u00001955941255.htm\u000075","GetPublicKeyDerEncoded Method (AsymmetricCipherKeyPair)\u00001961160179.htm\u0000112","Key Property\u00002075119955.htm\u000098","CBCryptKey Methods\u00002143963147.htm\u0000218","GetSharedSecret Method\u0000232981836.htm\u000077","GenerateKeyPair Method ()\u0000326356533.htm\u0000159","ChallengeResponseBytes Property\u0000423211944.htm\u0000124","GetSharedSecret Method ()\u0000448759364.htm\u0000140","GetSharedSecret Method (AsymmetricCipherKeyPair, )\u000046105457.htm\u0000165","CBCrypt Methods\u0000463588477.htm\u0000124","CBCryptHostId Property\u0000481982644.htm\u0000102","Challenge Properties\u0000508581146.htm\u000030","PublicKeyDerEncoded Property\u0000517266944.htm\u0000124","GetServerPublicDer Method\u0000583375642.htm\u000082","CBCryptKey Constructor ()\u0000609681953.htm\u0000108","GenerateKeyPair Method (String, String, String)\u0000718221398.htm\u0000161","GetPublicKeyDerEncoded Method\u0000939002703.htm\u000050","Challenge Members\u0000952553138.htm\u0000172","CBCryptKey Constructor\u0000965374767.htm\u000053","CBCrypt Members\u0000998664710.htm\u0000124"] -------------------------------------------------------------------------------- /Documentation/html/html/1050510383.htm: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | CBCryptKey Constructor (AsymmetricCipherKeyPair) 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
32 |
33 |
34 |

35 |

CBCryptKey Constructor (AsymmetricCipherKeyPair)

36 |
37 |
38 |

39 | Namespace: 40 |  Org.CBCrypt
41 | Assembly: 42 |  CBCrypt (in CBCrypt.dll)

Syntax


public CBCryptKey(
43 | 	AsymmetricCipherKeyPair Key
44 | )
Public Sub New ( _
45 | 	Key As AsymmetricCipherKeyPair _
46 | )
public:
47 | CBCryptKey(
48 | 	AsymmetricCipherKeyPair^ Key
49 | )

Parameters

Key
Type: AsymmetricCipherKeyPair
50 |
51 |
52 |
53 |
54 | 65 |
66 | 67 | -------------------------------------------------------------------------------- /Documentation/html/html/1369563518.htm: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ChallengeResponse Properties 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 |
31 |
32 |
33 |

34 |

ChallengeResponse Properties

35 |
36 |
37 |

The ChallengeResponse type exposes the following members.

38 |
39 |
40 |

Properties

41 |
42 |
43 |
44 |
45 | 46 | 47 | 48 | 49 | 50 | 53 | 54 | 55 | 56 | 57 | 60 | 63 | 65 | 66 | 69 | 72 | 74 |
51 |   52 | NameDescription
58 | Public property 59 | 61 | ChallengeResponseBytes 62 | 64 |
67 | Public property 68 | 70 | PublicKeyDerEncoded 71 | 73 |
75 |
76 |
77 |
78 |

See Also

79 |
80 |
81 |
82 |
83 | 84 | 85 | 86 | 89 | 92 |
93 |
94 |
95 |
96 |
97 |
98 | 109 |
110 | 111 | -------------------------------------------------------------------------------- /Documentation/html/html/1415551336.htm: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | Challenge Class 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 |
37 |
38 |
39 |
40 |

41 |

Challenge Class

42 |
43 |
44 |

45 | Namespace: 46 |  Org.CBCrypt
47 | Assembly: 48 |  CBCrypt (in CBCrypt.dll)

Syntax


public class Challenge
Public Class Challenge
public ref class Challenge

Inheritance Hierarchy


System.Object
  Org.CBCrypt..::..Challenge
49 |
50 |
51 |
52 |
53 | 64 |
65 | 66 | -------------------------------------------------------------------------------- /Documentation/html/html/1514855079.htm: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | Org.CBCrypt Namespace 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
32 |
33 |
34 |

35 |

Org.CBCrypt Namespace

36 |
37 |
38 |
39 |
40 |

Classes

41 |
42 |
43 |
44 |
45 | 46 | 47 | 48 | 49 | 50 | 53 | 54 | 55 | 56 | 57 | 60 | 63 | 65 | 66 | 69 | 72 | 74 | 75 | 78 | 81 | 83 | 84 | 87 | 90 | 92 |
51 |   52 | ClassDescription
58 | Public class 59 | 61 | CBCrypt 62 | 64 |
67 | Public class 68 | 70 | CBCryptKey 71 | 73 |
76 | Public class 77 | 79 | Challenge 80 | 82 |
85 | Public class 86 | 88 | ChallengeResponse 89 | 91 |
93 |
94 |
95 |
96 |
97 |
98 |
99 | 110 |
111 | 112 | -------------------------------------------------------------------------------- /Documentation/html/html/1581295153.htm: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | CBCryptKey Properties 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 |
31 |
32 |
33 |

34 |

CBCryptKey Properties

35 |
36 |
37 |

The CBCryptKey type exposes the following members.

38 |
39 |
40 |

Properties

41 |
42 |
43 |
44 |
45 | 46 | 47 | 48 | 49 | 50 | 53 | 54 | 55 | 56 | 57 | 60 | 63 | 65 |
51 |   52 | NameDescription
58 | Public property 59 | 61 | Key 62 | 64 |
66 |
67 |
68 |
69 |

See Also

70 |
71 |
72 |
73 |
74 | 75 | 76 | 77 |
78 | CBCryptKey Class 79 |
80 | 83 |
84 |
85 |
86 |
87 |
88 |
89 | 100 |
101 | 102 | -------------------------------------------------------------------------------- /Documentation/html/html/1750187521.htm: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | GetPublicKeyDerEncoded Method 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
32 |
33 |
34 |

35 |

CBCryptKey..::..GetPublicKeyDerEncoded Method

36 |
37 |
38 |

39 | Namespace: 40 |  Org.CBCrypt
41 | Assembly: 42 |  CBCrypt (in CBCrypt.dll)

Syntax


public System.Array[] GetPublicKeyDerEncoded()
Public Function GetPublicKeyDerEncoded As System.Array()
public:
43 | array<System.Array^>^ GetPublicKeyDerEncoded()
44 |
45 |
46 |
47 |
48 | 59 |
60 | 61 | -------------------------------------------------------------------------------- /Documentation/html/html/508581146.htm: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | Challenge Properties 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 |
31 |
32 |
33 |

34 |

Challenge Properties

35 |
36 |
37 |

The Challenge type exposes the following members.

38 |
39 |
40 |

Properties

41 |
42 |
43 |
44 |
45 | 46 | 47 | 48 | 49 | 50 | 53 | 54 | 55 | 56 | 57 | 60 | 63 | 65 | 66 | 69 | 72 | 74 | 75 | 78 | 81 | 83 |
51 |   52 | NameDescription
58 | Public property 59 | 61 | CBCryptHostId 62 | 64 |
67 | Public property 68 | 70 | ChallengeBytes 71 | 73 |
76 | Public property 77 | 79 | ServerPublicKeyDerEncoded 80 | 82 |
84 |
85 |
86 |
87 |

See Also

88 |
89 |
90 |
91 |
92 | 93 | 94 | 95 |
96 | Challenge Class 97 |
98 | 101 |
102 |
103 |
104 |
105 |
106 |
107 | 118 |
119 | 120 | -------------------------------------------------------------------------------- /Documentation/html/html/583375642.htm: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | GetServerPublicDer Method 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 |
35 |
36 |
37 |
38 |

39 |

Challenge..::..GetServerPublicDer Method

40 |
41 |
42 |

43 | Namespace: 44 |  Org.CBCrypt
45 | Assembly: 46 |  CBCrypt (in CBCrypt.dll)

Syntax


public System.Array[] GetServerPublicDer()
Public Function GetServerPublicDer As System.Array()
public:
47 | array<System.Array^>^ GetServerPublicDer()
48 |
49 |
50 |
51 |
52 | 63 |
64 | 65 | -------------------------------------------------------------------------------- /Documentation/html/icons/CFW.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/CFW.gif -------------------------------------------------------------------------------- /Documentation/html/icons/Caution.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/Caution.gif -------------------------------------------------------------------------------- /Documentation/html/icons/LastChild.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/LastChild.gif -------------------------------------------------------------------------------- /Documentation/html/icons/adm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/adm.gif -------------------------------------------------------------------------------- /Documentation/html/icons/adm_arch.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/adm_arch.gif -------------------------------------------------------------------------------- /Documentation/html/icons/adm_dev.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/adm_dev.gif -------------------------------------------------------------------------------- /Documentation/html/icons/adm_dev_arch.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/adm_dev_arch.gif -------------------------------------------------------------------------------- /Documentation/html/icons/alert_caution.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/alert_caution.gif -------------------------------------------------------------------------------- /Documentation/html/icons/alert_note.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/alert_note.gif -------------------------------------------------------------------------------- /Documentation/html/icons/alert_security.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/alert_security.gif -------------------------------------------------------------------------------- /Documentation/html/icons/arch.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/arch.gif -------------------------------------------------------------------------------- /Documentation/html/icons/big_adm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/big_adm.gif -------------------------------------------------------------------------------- /Documentation/html/icons/big_arch.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/big_arch.gif -------------------------------------------------------------------------------- /Documentation/html/icons/big_dev.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/big_dev.gif -------------------------------------------------------------------------------- /Documentation/html/icons/big_kw.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/big_kw.gif -------------------------------------------------------------------------------- /Documentation/html/icons/box.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/box.gif -------------------------------------------------------------------------------- /Documentation/html/icons/collall.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/collall.gif -------------------------------------------------------------------------------- /Documentation/html/icons/collapse.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/collapse.gif -------------------------------------------------------------------------------- /Documentation/html/icons/collapse_all.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/collapse_all.gif -------------------------------------------------------------------------------- /Documentation/html/icons/copycode.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/copycode.gif -------------------------------------------------------------------------------- /Documentation/html/icons/copycodeHighlight.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/copycodeHighlight.gif -------------------------------------------------------------------------------- /Documentation/html/icons/dev.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/dev.gif -------------------------------------------------------------------------------- /Documentation/html/icons/dev_arch.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/dev_arch.gif -------------------------------------------------------------------------------- /Documentation/html/icons/dropdown.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/dropdown.gif -------------------------------------------------------------------------------- /Documentation/html/icons/dropdownHover.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/dropdownHover.gif -------------------------------------------------------------------------------- /Documentation/html/icons/drpdown.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/drpdown.gif -------------------------------------------------------------------------------- /Documentation/html/icons/drpdown_orange.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/drpdown_orange.gif -------------------------------------------------------------------------------- /Documentation/html/icons/drpdown_orange_up.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/drpdown_orange_up.gif -------------------------------------------------------------------------------- /Documentation/html/icons/drpup.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/drpup.gif -------------------------------------------------------------------------------- /Documentation/html/icons/exp.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/exp.gif -------------------------------------------------------------------------------- /Documentation/html/icons/expall.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/expall.gif -------------------------------------------------------------------------------- /Documentation/html/icons/expand_all.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/expand_all.gif -------------------------------------------------------------------------------- /Documentation/html/icons/filter1a.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/filter1a.gif -------------------------------------------------------------------------------- /Documentation/html/icons/filter1c.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/filter1c.gif -------------------------------------------------------------------------------- /Documentation/html/icons/footer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/footer.gif -------------------------------------------------------------------------------- /Documentation/html/icons/gradient.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/gradient.gif -------------------------------------------------------------------------------- /Documentation/html/icons/greencheck.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/greencheck.gif -------------------------------------------------------------------------------- /Documentation/html/icons/greychck.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/greychck.gif -------------------------------------------------------------------------------- /Documentation/html/icons/header_prev_next.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/header_prev_next.jpg -------------------------------------------------------------------------------- /Documentation/html/icons/header_sql_tutorial_blank.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/header_sql_tutorial_blank.jpg -------------------------------------------------------------------------------- /Documentation/html/icons/header_sql_tutorial_logo.GIF: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/header_sql_tutorial_logo.GIF -------------------------------------------------------------------------------- /Documentation/html/icons/kw.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/kw.gif -------------------------------------------------------------------------------- /Documentation/html/icons/kw_adm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/kw_adm.gif -------------------------------------------------------------------------------- /Documentation/html/icons/kw_adm_arch.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/kw_adm_arch.gif -------------------------------------------------------------------------------- /Documentation/html/icons/kw_adm_dev.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/kw_adm_dev.gif -------------------------------------------------------------------------------- /Documentation/html/icons/kw_adm_dev_arch.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/kw_adm_dev_arch.gif -------------------------------------------------------------------------------- /Documentation/html/icons/kw_arch.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/kw_arch.gif -------------------------------------------------------------------------------- /Documentation/html/icons/kw_dev.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/kw_dev.gif -------------------------------------------------------------------------------- /Documentation/html/icons/kw_dev_arch.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/kw_dev_arch.gif -------------------------------------------------------------------------------- /Documentation/html/icons/load.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/load.gif -------------------------------------------------------------------------------- /Documentation/html/icons/load_hover.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/load_hover.gif -------------------------------------------------------------------------------- /Documentation/html/icons/note.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/note.gif -------------------------------------------------------------------------------- /Documentation/html/icons/pencil.GIF: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/pencil.GIF -------------------------------------------------------------------------------- /Documentation/html/icons/privclass.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/privclass.gif -------------------------------------------------------------------------------- /Documentation/html/icons/privdelegate.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/privdelegate.gif -------------------------------------------------------------------------------- /Documentation/html/icons/privenum.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/privenum.gif -------------------------------------------------------------------------------- /Documentation/html/icons/privenumeration.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/privenumeration.gif -------------------------------------------------------------------------------- /Documentation/html/icons/privevent.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/privevent.gif -------------------------------------------------------------------------------- /Documentation/html/icons/privextension.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/privextension.gif -------------------------------------------------------------------------------- /Documentation/html/icons/privfield.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/privfield.gif -------------------------------------------------------------------------------- /Documentation/html/icons/privinterface.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/privinterface.gif -------------------------------------------------------------------------------- /Documentation/html/icons/privmethod.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/privmethod.gif -------------------------------------------------------------------------------- /Documentation/html/icons/privproperty.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/privproperty.gif -------------------------------------------------------------------------------- /Documentation/html/icons/privstructure.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/privstructure.gif -------------------------------------------------------------------------------- /Documentation/html/icons/protclass.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/protclass.gif -------------------------------------------------------------------------------- /Documentation/html/icons/protdelegate.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/protdelegate.gif -------------------------------------------------------------------------------- /Documentation/html/icons/protenum.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/protenum.gif -------------------------------------------------------------------------------- /Documentation/html/icons/protenumeration.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/protenumeration.gif -------------------------------------------------------------------------------- /Documentation/html/icons/protevent.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/protevent.gif -------------------------------------------------------------------------------- /Documentation/html/icons/protextension.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/protextension.gif -------------------------------------------------------------------------------- /Documentation/html/icons/protfield.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/protfield.gif -------------------------------------------------------------------------------- /Documentation/html/icons/protinterface.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/protinterface.gif -------------------------------------------------------------------------------- /Documentation/html/icons/protmethod.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/protmethod.gif -------------------------------------------------------------------------------- /Documentation/html/icons/protoperator.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/protoperator.gif -------------------------------------------------------------------------------- /Documentation/html/icons/protproperty.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/protproperty.gif -------------------------------------------------------------------------------- /Documentation/html/icons/protstructure.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/protstructure.gif -------------------------------------------------------------------------------- /Documentation/html/icons/pubclass.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/pubclass.gif -------------------------------------------------------------------------------- /Documentation/html/icons/pubdelegate.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/pubdelegate.gif -------------------------------------------------------------------------------- /Documentation/html/icons/pubenum.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/pubenum.gif -------------------------------------------------------------------------------- /Documentation/html/icons/pubenumeration.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/pubenumeration.gif -------------------------------------------------------------------------------- /Documentation/html/icons/pubevent.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/pubevent.gif -------------------------------------------------------------------------------- /Documentation/html/icons/pubextension.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/pubextension.gif -------------------------------------------------------------------------------- /Documentation/html/icons/pubfield.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/pubfield.gif -------------------------------------------------------------------------------- /Documentation/html/icons/pubinterface.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/pubinterface.gif -------------------------------------------------------------------------------- /Documentation/html/icons/pubmethod.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/pubmethod.gif -------------------------------------------------------------------------------- /Documentation/html/icons/puboperator.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/puboperator.gif -------------------------------------------------------------------------------- /Documentation/html/icons/pubproperty.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/pubproperty.gif -------------------------------------------------------------------------------- /Documentation/html/icons/pubstructure.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/pubstructure.gif -------------------------------------------------------------------------------- /Documentation/html/icons/requirements1a.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/requirements1a.gif -------------------------------------------------------------------------------- /Documentation/html/icons/requirements1c.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/requirements1c.gif -------------------------------------------------------------------------------- /Documentation/html/icons/save.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/save.gif -------------------------------------------------------------------------------- /Documentation/html/icons/save_hover.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/save_hover.gif -------------------------------------------------------------------------------- /Documentation/html/icons/security.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/security.gif -------------------------------------------------------------------------------- /Documentation/html/icons/seealso1a.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/seealso1a.gif -------------------------------------------------------------------------------- /Documentation/html/icons/seealso1c.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/seealso1c.gif -------------------------------------------------------------------------------- /Documentation/html/icons/slMobile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/slMobile.gif -------------------------------------------------------------------------------- /Documentation/html/icons/static.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/static.gif -------------------------------------------------------------------------------- /Documentation/html/icons/xna.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/icons/xna.gif -------------------------------------------------------------------------------- /Documentation/html/images/030c41d9079671d09a62d8e2c1db6973.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/images/030c41d9079671d09a62d8e2c1db6973.gif -------------------------------------------------------------------------------- /Documentation/html/images/LT_tab.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/images/LT_tab.gif -------------------------------------------------------------------------------- /Documentation/html/images/RT_tab.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/images/RT_tab.gif -------------------------------------------------------------------------------- /Documentation/html/images/alert_note.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/images/alert_note.gif -------------------------------------------------------------------------------- /Documentation/html/images/lightweight_topnav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/images/lightweight_topnav.png -------------------------------------------------------------------------------- /Documentation/html/images/lightweight_topnav_slice.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/images/lightweight_topnav_slice.gif -------------------------------------------------------------------------------- /Documentation/html/images/lt_search.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/images/lt_search.gif -------------------------------------------------------------------------------- /Documentation/html/images/msdn2010branding-stripe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/images/msdn2010branding-stripe.png -------------------------------------------------------------------------------- /Documentation/html/images/msdn2010branding-stripe1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/images/msdn2010branding-stripe1.png -------------------------------------------------------------------------------- /Documentation/html/images/msg-icon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/images/msg-icon.gif -------------------------------------------------------------------------------- /Documentation/html/images/msg-incoming.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/images/msg-incoming.gif -------------------------------------------------------------------------------- /Documentation/html/images/msg-outgoing.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/images/msg-outgoing.gif -------------------------------------------------------------------------------- /Documentation/html/images/rt_search.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/images/rt_search.gif -------------------------------------------------------------------------------- /Documentation/html/images/searchicon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/images/searchicon.gif -------------------------------------------------------------------------------- /Documentation/html/images/slice_search.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/images/slice_search.gif -------------------------------------------------------------------------------- /Documentation/html/index.php: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | CBCrypt - Table of Content 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 |
15 | 16 | 25 | 26 | 31 | 32 | 47 | 48 | 51 | 52 | 55 | 56 |
57 | load('WebTOC.xml'); 60 | $xpath = new DOMXPath($toc); 61 | $nodes = $xpath->query("/HelpTOC/*"); 62 | foreach($nodes as $node) 63 | { 64 | $id = $node->getAttribute("Id"); 65 | $url = $node->getAttribute("Url"); 66 | $title = $node->getAttribute("Title"); 67 | if (empty($url)) 68 | { 69 | $url = "#"; 70 | $target = ""; 71 | } 72 | else 73 | { 74 | $target = " target=\"TopicContent\""; 75 | } 76 | 77 | if ($node->hasChildNodes()) 78 | { 79 | ?> 80 |
81 | 82 | > 83 | 84 |
85 | 90 |
91 | 92 | > 93 |
94 | 98 |
99 | 100 |
101 | 102 |
103 | 104 | 107 | 108 |
109 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /Documentation/html/scripts/CheckboxMenu.js: -------------------------------------------------------------------------------- 1 | 2 | function CheckboxMenu(id, data, persistkeys, globals) 3 | { 4 | this.id = id; 5 | this.menuCheckboxIds = new Array(); 6 | this.data = data; 7 | this.count = 0; 8 | 9 | var element = document.getElementById(id); 10 | var checkboxNodes = element.getElementsByTagName("input"); 11 | 12 | for(var checkboxCount=0; checkboxCount < checkboxNodes.length; checkboxCount++) 13 | { 14 | var checkboxId = checkboxNodes[checkboxCount].getAttribute('id'); 15 | var checkboxData = checkboxNodes[checkboxCount].getAttribute('data'); 16 | var dataSplits = checkboxData.split(','); 17 | var defaultValue = checkboxNodes[checkboxCount].getAttribute('value'); 18 | if (checkboxData != null && checkboxData.indexOf("persist") != -1) 19 | persistkeys.push(checkboxId); 20 | 21 | this.menuCheckboxIds[dataSplits[0]] = checkboxId; 22 | 23 | // try to get the value for this checkbox id from globals 24 | var persistedValue = (globals == null) ? null : globals.VariableExists(checkboxId) ? globals.VariableValue(checkboxId) : null; 25 | var currentValue = (persistedValue != null) ? persistedValue : (defaultValue == null) ? "on" : defaultValue; 26 | 27 | // set the checkbox's check state 28 | this.SetCheckState(checkboxId, currentValue); 29 | 30 | this.count++; 31 | } 32 | } 33 | 34 | CheckboxMenu.prototype.SetCheckState=function(id, value) 35 | { 36 | var checkbox = document.getElementById(id); 37 | if(checkbox != null) 38 | { 39 | checkbox.checked = (value == "on") ? true : false; 40 | } 41 | 42 | // set the value for the checkbox id in the data array 43 | this.data[id] = value; 44 | } 45 | 46 | CheckboxMenu.prototype.GetCheckState=function(id) 47 | { 48 | var checkbox = document.getElementById(id); 49 | if(checkbox != null) 50 | return checkbox.checked; 51 | return false; 52 | } 53 | 54 | CheckboxMenu.prototype.ToggleCheckState=function(id) 55 | { 56 | // at least one checkbox must always be checked 57 | var checkedCount = this.GetCheckedCount(); 58 | 59 | if(this.data[id] == "on" && checkedCount > 1) 60 | this.SetCheckState(id, "off"); 61 | else 62 | this.SetCheckState(id, "on"); 63 | } 64 | 65 | // returns the checkbox id associated with a key 66 | CheckboxMenu.prototype.GetCheckboxId=function(key) 67 | { 68 | return this.menuCheckboxIds[key]; 69 | } 70 | 71 | // returns the array of checkbox ids 72 | CheckboxMenu.prototype.GetCheckboxIds=function() 73 | { 74 | return this.menuCheckboxIds; 75 | } 76 | 77 | // returns the @data attribute of the checkbox element 78 | CheckboxMenu.prototype.GetCheckboxData=function(checkboxId) 79 | { 80 | var checkbox = document.getElementById(checkboxId); 81 | if (checkbox == null) return ""; 82 | return checkbox.getAttribute('data'); 83 | } 84 | 85 | CheckboxMenu.prototype.GetDropdownLabelId=function() 86 | { 87 | var checkboxCount = this.count; 88 | var checkedCount = this.GetCheckedCount(); 89 | var idPrefix = this.id; 90 | 91 | // if all boxes checked, use showall label 92 | if (checkedCount == checkboxCount) 93 | return idPrefix.concat("AllLabel"); 94 | 95 | // if only one is checked, use label appropriate for that one checkbox 96 | if (checkedCount == 1) 97 | { 98 | for(var key in this.menuCheckboxIds) 99 | { 100 | if (this.data[this.menuCheckboxIds[key]] == "on") 101 | { 102 | return idPrefix.concat(key,'Label'); 103 | } 104 | } 105 | } 106 | 107 | // if multiple or zero checked, use multiple label 108 | return idPrefix.concat("MultipleLabel"); 109 | } 110 | 111 | CheckboxMenu.prototype.GetCheckedCount=function() 112 | { 113 | var count = 0; 114 | for(var key in this.menuCheckboxIds) 115 | { 116 | if (this.data[this.menuCheckboxIds[key]] == "on") 117 | count++; 118 | } 119 | return (count); 120 | } 121 | 122 | // returns an array containing the ids of the checkboxes that are checked 123 | CheckboxMenu.prototype.GetCheckedIds=function() 124 | { 125 | var idArray = new Array(); 126 | for(var key in this.menuCheckboxIds) 127 | { 128 | if (this.data[this.menuCheckboxIds[key]] == "on") 129 | idArray.push(this.menuCheckboxIds[key]); 130 | } 131 | return idArray; 132 | } 133 | 134 | CheckboxMenu.prototype.GetGroupCheckedCount=function(checkboxGroup) 135 | { 136 | var count = 0; 137 | for(var i = 0; i < checkboxGroup.length; i++) 138 | { 139 | if (this.data[checkboxGroup[i]] == "on") 140 | count++; 141 | } 142 | return (count); 143 | } 144 | 145 | CheckboxMenu.prototype.ToggleGroupCheckState=function(id, checkboxGroup) 146 | { 147 | // at least one checkbox must always be checked 148 | var checkedCount = this.GetGroupCheckedCount(checkboxGroup); 149 | 150 | // if the group has multiple checkboxes, one must always be checked; so toggle to "off" only if more than one currently checked 151 | // if the group has only one checkbox, it's okay to toggle it on/off 152 | if(this.data[id] == "on" && (checkedCount > 1 || checkboxGroup.length == 1)) 153 | this.SetCheckState(id, "off"); 154 | else 155 | this.SetCheckState(id, "on"); 156 | } 157 | 158 | -------------------------------------------------------------------------------- /Documentation/html/scripts/Dropdown.js: -------------------------------------------------------------------------------- 1 | 2 | // Dropdown menu control 3 | 4 | function Dropdown(activatorId, dropdownId, containerId) { 5 | 6 | // store activator and dropdown elements 7 | this.activator = document.getElementById(activatorId); 8 | this.dropdown = document.getElementById(dropdownId); 9 | this.container = document.getElementById(containerId); 10 | this.activatorImage = document.getElementById(activatorId + "Image"); 11 | 12 | // wire up show/hide events 13 | registerEventHandler(this.activator,'mouseover', getInstanceDelegate(this, "show")); 14 | registerEventHandler(this.activator,'mouseout', getInstanceDelegate(this, "requestHide")); 15 | registerEventHandler(this.dropdown,'mouseover', getInstanceDelegate(this, "show")); 16 | registerEventHandler(this.dropdown,'mouseout', getInstanceDelegate(this, "requestHide")); 17 | 18 | // fix visibility and position 19 | this.dropdown.style.visibility = 'hidden'; 20 | this.dropdown.style.position = 'absolute'; 21 | this.reposition(null); 22 | 23 | // wire up repositioning event 24 | registerEventHandler(window, 'resize', getInstanceDelegate(this, "reposition")); 25 | 26 | 27 | } 28 | 29 | Dropdown.prototype.show = function(e) { 30 | clearTimeout(this.timer); 31 | this.dropdown.style.visibility = 'visible'; 32 | if (this.activatorImage != null) 33 | this.activatorImage.src = dropDownHoverImage.src; 34 | if (this.activator != null) 35 | this.activator.className = "filterOnHover"; 36 | } 37 | 38 | Dropdown.prototype.hide = function(e) { 39 | this.dropdown.style.visibility = 'hidden'; 40 | if (this.activatorImage != null) 41 | this.activatorImage.src = dropDownImage.src; 42 | if (this.activator != null) 43 | this.activator.className = "filter"; 44 | } 45 | 46 | Dropdown.prototype.requestHide = function(e) { 47 | this.timer = setTimeout( getInstanceDelegate(this, "hide"), 250); 48 | } 49 | 50 | Dropdown.prototype.reposition = function(e) { 51 | 52 | // get position of activator 53 | var offsetLeft = 0; 54 | var offsetTop = 0; 55 | var offsetElement = this.activator; 56 | 57 | while (offsetElement && offsetElement != this.container) { 58 | offsetLeft += offsetElement.offsetLeft; 59 | offsetTop += offsetElement.offsetTop; 60 | offsetElement = offsetElement.offsetParent; 61 | } 62 | 63 | // set position of dropdown relative to it 64 | this.dropdown.style.left = offsetLeft; 65 | this.dropdown.style.top = offsetTop + this.activator.offsetHeight; 66 | } 67 | 68 | Dropdown.prototype.SetActivatorLabel = function(labelId) 69 | { 70 | // get the children of the activator node, which includes the label nodes 71 | var labelNodes = this.activator.childNodes; 72 | 73 | 74 | for(var labelCount=0; labelCount < labelNodes.length; labelCount++) 75 | { 76 | if(labelNodes[labelCount].tagName == 'LABEL') 77 | { 78 | var labelNodeId = labelNodes[labelCount].getAttribute('id'); 79 | if (labelNodeId == labelId) 80 | { 81 | labelNodes[labelCount].style.display = "inline"; 82 | } 83 | else 84 | { 85 | labelNodes[labelCount].style.display = "none"; 86 | } 87 | } 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /Documentation/html/scripts/EventUtilities.js: -------------------------------------------------------------------------------- 1 | 2 | // attach a handler to a particular event on an element 3 | // in a browser-independent way 4 | function registerEventHandler (element, event, handler) { 5 | if (element.attachEvent) { 6 | // MS registration model 7 | element.attachEvent('on' + event, handler); 8 | } else if (element.addEventListener) { 9 | // NN (W4C) regisration model 10 | element.addEventListener(event, handler, false); 11 | } else { 12 | // old regisration model as fall-back 13 | element[event] = handler; 14 | } 15 | } 16 | 17 | // get a delegate that refers to an instance method 18 | function getInstanceDelegate (obj, methodName) { 19 | return( function(e) { 20 | e = e || window.event; 21 | return obj[methodName](e); 22 | } ); 23 | } 24 | -------------------------------------------------------------------------------- /Documentation/html/scripts/SplitScreen.js: -------------------------------------------------------------------------------- 1 | 2 | function SplitScreen (nonScrollingRegionId, scrollingRegionId) { 3 | 4 | // store references to the two regions 5 | this.nonScrollingRegion = document.getElementById(nonScrollingRegionId); 6 | this.scrollingRegion = document.getElementById(scrollingRegionId); 7 | 8 | // set the scrolling settings 9 | this.scrollingRegion.parentElement.style.margin = "0px"; 10 | this.scrollingRegion.parentElement.style.overflow = "hidden"; 11 | this.scrollingRegion.style.overflow = "auto"; 12 | 13 | // fix the size of the scrolling region 14 | this.resize(null); 15 | 16 | // add an event handler to resize the scrolling region when the window is resized 17 | registerEventHandler(window, 'resize', getInstanceDelegate(this, "resize")); 18 | 19 | // Added by ComponentOne 20 | this.resize(null); 21 | } 22 | 23 | SplitScreen.prototype.resize = function(e) { 24 | var height = document.body.clientHeight - this.nonScrollingRegion.offsetHeight; 25 | if (height > 0) { 26 | this.scrollingRegion.style.height = height; 27 | } else { 28 | this.scrollingRegion.style.height = 0; 29 | } 30 | this.scrollingRegion.style.width = this.scrollingRegion.parentElement.clientWidth; 31 | } 32 | -------------------------------------------------------------------------------- /Documentation/html/scripts/languageSelector.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | function setActiveTab(baseClass,activeClassName,activeTab) { 4 | 5 | // set defalt for all tabs 6 | var classElements = getElementsByClass("CodeSnippetContainerTab", null, 'div'); 7 | if(classElements != null) { 8 | for(i=0; i a.indexOf(".chm::")) 37 | { 38 | if (a.indexOf("\\")==-1) 39 | { 40 | break; 41 | } 42 | a = a.substring(a.indexOf("\\")+1,a.length); 43 | } 44 | return("ms-its:"+a) 45 | } 46 | else if (URL.indexOf("file:///")!=-1) 47 | { 48 | a = URL; 49 | 50 | b = a.substring(a.lastIndexOf("html")+5,a.length); 51 | return("file:///"+b); 52 | } 53 | else return(URL); 54 | } 55 | 56 | function GetLanguage() 57 | { 58 | var langauge; 59 | if(navigator.userAgent.indexOf("Firefox")!=-1) 60 | { 61 | var index = navigator.userAgent.indexOf('('); 62 | var string = navigator.userAgent.substring(navigator.userAgent.indexOf('('), navigator.userAgent.length); 63 | var splitString = string.split(';'); 64 | language = splitString[3].substring(1, splitString[3].length); 65 | } 66 | else language = navigator.systemLanguage; 67 | return(language); 68 | } 69 | 70 | 71 | //---Gets topic rating.--- 72 | function GetRating() 73 | { 74 | 75 | sRating = "0"; 76 | for(var x = 0;x < 5;x++) 77 | { 78 | if(document.formRating) { 79 | if(document.formRating.fbRating[x].checked) {sRating = x + 1;}} 80 | else return sRating; 81 | } 82 | return sRating; 83 | } 84 | 85 | function SubmitFeedback(alias, product, deliverable, productVersion, documentationVersion, defaultBody, defaultSubject) 86 | { 87 | var subject = defaultSubject 88 | + " (" 89 | + "/1:" 90 | + product 91 | + "/2:" 92 | + productVersion 93 | + "/3:" 94 | + documentationVersion 95 | + "/4:" 96 | + DeliverableValue(deliverable) 97 | + "/5:" 98 | + URLValue() 99 | + "/6:" 100 | + GetRating() 101 | + "/7:" 102 | + DeliveryType() 103 | + "/8:" 104 | + GetLanguage() 105 | + "/9:" 106 | + version 107 | + ")"; 108 | 109 | location.href = "mailto:" + alias + "?subject=" + subject 110 | + "&body=" + defaultBody; 111 | } 112 | 113 | function AltFeedback(src, title) { 114 | src.title=title; 115 | return; 116 | } 117 | -------------------------------------------------------------------------------- /Documentation/html/styles/highlight.css: -------------------------------------------------------------------------------- 1 | .highlight-inline { color: #000066; font-size: 9pt; font-family: Consolas, "Courier New", Courier, monospace; } 2 | .highlight-pre { clear: both; width: 99.5%; background-color: #EFEFF7; padding: 0.4em; font-size: 9pt; font-family: Consolas, "Courier New", Courier, monospace; margin-top: 0px; margin-bottom: 1em; } 3 | .highlight-comment { color: #006633; } 4 | .highlight-literal { color: #CC0000; } 5 | .highlight-number { color: #009966; } 6 | .highlight-keyword { color: #0000FF; } 7 | .highlight-preprocessor { color: #996666; } 8 | .highlight-xml-tag { color: #AA4400 } 9 | .highlight-xml-bracket { color: #0000FF } 10 | .highlight-xml-comment { color: #008800 } 11 | .highlight-xml-cdata { color: #AA0088 } 12 | .highlight-xml-attribute-name { color: #0000FF } 13 | .highlight-xml-attribute-equal { color: #000000 } 14 | .highlight-xml-attribute-value {color: #CC0000 } 15 | .highlight-title { font-weight: bold; margin-top: 1em; margin-bottom: 2px; border-bottom: gray 1px solid; padding-bottom: 3px; } 16 | .highlight-copycode { float: right; padding-right: 10px; font-weight: normal; cursor: pointer; } 17 | .highlight-copycode_h { float: right; padding-right: 10px; font-weight: normal; cursor: pointer; text-decoration: underline} 18 | .highlight-lineno { font-size: 80%; color: black } 19 | .highlight-lnborder { border-right-style: solid; border-right-width: 1px; border-color: gray; padding-right: 4px; margin-right: 4px; width: 4px;} 20 | .highlight-spacer { padding-right: 20px; } 21 | .highlight-spacerShort { padding-right: 5px; } 22 | .highlight-collapsebox { cursor: pointer; color: black; text-align: center; border-style: solid; border-width: 1px; border-color: gray; margin-left: 2px; margin-right: 5px; } 23 | .highlight-collapsed { border-style: solid; border-width: 1px; border-color: gray; margin: 2px; color: gray; } 24 | .highlight-expanded { border-left-style: solid; border-left-width: 1px; border-color: gray; margin-left: 2px; margin-right: 10px; } 25 | .highlight-endblock { border-left-style: solid; border-left-width: 1px; border-bottom-style: solid; border-bottom-width: 1px; border-color: gray; margin-left: 2px; margin-right: 10px; } 26 | .highlight-pshell-cmdlet { color: #5A9EA5; font-weight: bold; } 27 | .highlight-namespace { color: #008284; } 28 | -------------------------------------------------------------------------------- /Documentation/html/styles/highlight.js: -------------------------------------------------------------------------------- 1 | //============================================================================= 2 | // System : Color Syntax Highlighter 3 | // File : Highlight.js 4 | // Author : Eric Woodruff (Eric@EWoodruff.us) 5 | // Updated : 11/13/2007 6 | // Note : Copyright 2006, Eric Woodruff, All rights reserved 7 | // 8 | // This contains the script to expand and collapse the regions in the 9 | // syntax highlighted code. 10 | // 11 | //============================================================================= 12 | 13 | // Expand/collapse a region 14 | function HighlightExpandCollapse(showId, hideId) 15 | { 16 | var showSpan = document.getElementById(showId), 17 | hideSpan = document.getElementById(hideId); 18 | 19 | showSpan.style.display = "inline"; 20 | hideSpan.style.display = "none"; 21 | } 22 | 23 | // Copy the code if Enter or Space is hit with the image focused 24 | function CopyColorizedCodeCheckKey(titleDiv, eventObj) 25 | { 26 | if(eventObj != undefined && (eventObj.keyCode == 13 || 27 | eventObj.keyCode == 32)) 28 | CopyColorizedCode(titleDiv); 29 | } 30 | 31 | // Change the icon as the mouse moves in and out of the Copy Code link 32 | // There should be an image with the same name but an "_h" suffix just 33 | // before the extension. 34 | function CopyCodeChangeIcon(linkSpan) 35 | { 36 | var image = linkSpan.firstChild.src; 37 | var pos = image.lastIndexOf("."); 38 | 39 | if(linkSpan.className == "highlight-copycode") 40 | { 41 | linkSpan.className = "highlight-copycode_h"; 42 | linkSpan.firstChild.src = image.substr(0, pos) + "_h" + 43 | image.substr(pos); 44 | } 45 | else 46 | { 47 | linkSpan.className = "highlight-copycode"; 48 | linkSpan.firstChild.src = image.substr(0, pos - 2) + image.substr(pos); 49 | } 50 | } 51 | 52 | // Copy the code from a colorized code block to the clipboard. 53 | function CopyColorizedCode(titleDiv) 54 | { 55 | var preTag, idx, line, block, htmlLines, lines, codeText, hasLineNos, 56 | hasRegions, clip, trans, copyObject, clipID; 57 | var reLineNo = /^\s*\d{1,4}/; 58 | var reRegion = /^\s*\d{1,4}\+.*?\d{1,4}-/; 59 | var reRegionText = /^\+.*?\-/; 60 | 61 | // Find the
 tag containing the code.  It should be in the next
 62 |     // element or one of its children.
 63 |     block = titleDiv.nextSibling;
 64 | 
 65 |     while(block.nodeName == "#text")
 66 |         block = block.nextSibling;
 67 | 
 68 |     while(block.tagName != "PRE")
 69 |     {
 70 |         block = block.firstChild;
 71 | 
 72 |         while(block.nodeName == "#text")
 73 |             block = block.nextSibling;
 74 |     }
 75 | 
 76 |     if(block.innerText != undefined)
 77 |         codeText = block.innerText;
 78 |     else
 79 |         codeText = block.textContent;
 80 | 
 81 |     hasLineNos = block.innerHTML.indexOf("highlight-lineno");
 82 |     hasRegions = block.innerHTML.indexOf("highlight-collapsebox");
 83 |     htmlLines = block.innerHTML.split("\n");
 84 |     lines = codeText.split("\n");
 85 | 
 86 |     // Remove the line numbering and collapsible regions if present
 87 |     if(hasLineNos != -1 || hasRegions != -1)
 88 |     {
 89 |         codeText = "";
 90 | 
 91 |         for(idx = 0; idx < lines.length; idx++)
 92 |         {
 93 |             line = lines[idx];
 94 | 
 95 |             if(hasRegions && reRegion.test(line))
 96 |                 line = line.replace(reRegion, "");
 97 |             else
 98 |             {
 99 |                 line = line.replace(reLineNo, "");
100 | 
101 |                 // Lines in expanded blocks have an extra space
102 |                 if(htmlLines[idx].indexOf("highlight-expanded") != -1 ||
103 |                   htmlLines[idx].indexOf("highlight-endblock") != -1)
104 |                     line = line.substr(1);
105 |             }
106 | 
107 |             if(hasRegions && reRegionText.test(line))
108 |                 line = line.replace(reRegionText, "");
109 | 
110 |             codeText += line;
111 | 
112 |             // Not all browsers keep the line feed when split
113 |             if(line[line.length - 1] != "\n")
114 |                 codeText += "\n";
115 |         }
116 |     }
117 | 
118 |     // IE or FireFox/Netscape?
119 |     if(window.clipboardData)
120 |         window.clipboardData.setData("Text", codeText);
121 |     else
122 |         if(window.netscape)
123 |         {
124 |             // Give unrestricted access to browser APIs using XPConnect
125 |             try
126 |             {
127 |                 netscape.security.PrivilegeManager.enablePrivilege(
128 |                     "UniversalXPConnect");
129 |             }
130 |             catch(e)
131 |             {
132 |                 alert("Universal Connect was refused, cannot copy to " +
133 |                     "clipboard.  Go to about:config and set " +
134 |                     "signed.applets.codebase_principal_support to true to " +
135 |                     "enable clipboard support.");
136 |                 return;
137 |             }
138 | 
139 |             // Creates an instance of nsIClipboard
140 |             clip = Components.classes[
141 |                 "@mozilla.org/widget/clipboard;1"].createInstance(
142 |                 Components.interfaces.nsIClipboard);
143 | 
144 |             // Creates an instance of nsITransferable
145 |             if(clip)
146 |                 trans = Components.classes[
147 |                     "@mozilla.org/widget/transferable;1"].createInstance(
148 |                     Components.interfaces.nsITransferable);
149 | 
150 |             if(!trans)
151 |             {
152 |                 alert("Copy to Clipboard is not supported by this browser");
153 |                 return;
154 |             }
155 | 
156 |             // Register the data flavor
157 |             trans.addDataFlavor("text/unicode");
158 | 
159 |             // Create object to hold the data
160 |             copyObject = new Object();
161 | 
162 |             // Creates an instance of nsISupportsString
163 |             copyObject = Components.classes[
164 |                 "@mozilla.org/supports-string;1"].createInstance(
165 |                 Components.interfaces.nsISupportsString);
166 | 
167 |             // Assign the data to be copied
168 |             copyObject.data = codeText;
169 | 
170 |             // Add data objects to transferable
171 |             trans.setTransferData("text/unicode", copyObject,
172 |                 codeText.length * 2);
173 | 
174 |             clipID = Components.interfaces.nsIClipboard;
175 | 
176 |             if(!clipID)
177 |             {
178 |                 alert("Copy to Clipboard is not supported by this browser");
179 |                 return;
180 |             }
181 | 
182 |             // Transfer the data to the clipboard
183 |             clip.setData(trans, null, clipID.kGlobalClipboard);
184 |         }
185 |         else
186 |             alert("Copy to Clipboard is not supported by this browser");
187 | }
188 | 


--------------------------------------------------------------------------------
/Documentation/html/styles/lw-code.css:
--------------------------------------------------------------------------------
  1 | /*
  2 |  * VS 2010 Presentation Template for Sandcastle
  3 |  * (styles for the Syntax code section)
  4 |  *
  5 |  * Based on the MSDN Library Lightweight style.
  6 |  */
  7 | 
  8 | /**
  9 |  * Hide othe code than .cs
 10 |  */
 11 | 
 12 | .cpp, .vb, .nu, .fs {
 13 |     display: none
 14 | }
 15 | 
 16 | pre.libCScode {
 17 |     font-family: Consolas, "Courier New", monospace;
 18 | 	white-space:-moz-pre-wrap;
 19 | 	word-wrap:break-word;
 20 | 	overflow:hidden;
 21 | 	margin: 0;
 22 | }
 23 | 
 24 | .libCScode .keyword {
 25 |     color: Navy;
 26 | }
 27 | 
 28 | 
 29 | div.CodeSnippetContainerCode {
 30 |     display: none;
 31 | }
 32 | 
 33 | div.CodeSnippetContainerCode.CSharpCode,
 34 | div.CodeSnippetContainerCode.JSharpCode {
 35 |     display: block;
 36 | }
 37 | 
 38 | 
 39 | div.CodeSnippetContainerTab.CSharpTab {
 40 |     background:white;
 41 |     border-bottom-color:White;
 42 | }
 43 | 
 44 | /**
 45 |  * Code snippet window
 46 |  */
 47 | 
 48 | .CodeSnippetContainer {
 49 | 	clear:both;
 50 | 	width:100%;
 51 | 	margin-top:20px
 52 | }
 53 | 
 54 | div.CodeSnippetContainerTabs {
 55 | 	vertical-align:middle;
 56 | 	font-family:'Segoe UI', Verdana, Arial;
 57 | 	font-size:10pt!important;
 58 | 	height:22px;
 59 | 	position:relative;
 60 | 	z-index:1
 61 | }
 62 | .CodeSnippetContainerTabLeft, .CodeSnippetContainerTabRight, .CodeSnippetContainerTabLeftActive, .CodeSnippetContainerTabRightActive, .CodeSnippetContainerTabRightActiveDisabled, .CodeSnippetContainerTabLeftUnrecognized, .CodeSnippetContainerTabRightUnrecognized, .CodeSnippetContainerTabLeftDisabled, .CodeSnippetContainerTabRightDisabled {
 63 | 	width:6px;
 64 | 	height:20px;
 65 | 	float:left;
 66 | 	border-bottom:solid 2px #d0d2d2
 67 | }
 68 | .CodeSnippetContainerTabLeft {
 69 | 	background-image:url(../Images/LT_tab.gif)
 70 | }
 71 | .CodeSnippetContainerTabRight {
 72 | 	background-image:url(../Images/RT_tab.gif)
 73 | }
 74 | .CodeSnippetContainerTabLeftActive {
 75 | 	height:22px;
 76 | 	border-bottom:none;
 77 | 	background-image:url(../Images/LT_tab_Active.gif)
 78 | }
 79 | .CodeSnippetContainerTabRightActive, .CodeSnippetContainerTabRightActiveDisabled {
 80 | 	height:22px;
 81 | 	border-bottom:none;
 82 | 	background-image:url(../Images/RT_tab_Active.gif)
 83 | }
 84 | .CodeSnippetContainerTabLeftUnrecognized {
 85 | 	height:22px;
 86 | 	border-bottom:none;
 87 | 	background-image:url(../Images/LT_tab_Unrecognized.gif)
 88 | }
 89 | .CodeSnippetContainerTabRightUnrecognized {
 90 | 	height:22px;
 91 | 	border-bottom:none;
 92 | 	background-image:url(../Images/RT_tab_Unrecognized.gif)
 93 | }
 94 | .CodeSnippetContainerTabLeftDisabled {
 95 | 	background-image:url(../Images/LT_tab_Disabled.gif)
 96 | }
 97 | .CodeSnippetContainerTabRightDisabled {
 98 | 	background-image:url(../Images/RT_tab_Disabled.gif)
 99 | }
100 | .CodeSnippetContainerTabFirst, .CodeSnippetContainerTab, .CodeSnippetContainerTabUnrecognized, .CodeSnippetContainerTabUnrecognizedNotFirst, .CodeSnippetContainerTabActive, .CodeSnippetContainerTabActiveNotFirst, .CodeSnippetContainerTabDisabled, .CodeSnippetContainerTabDisabledNotFirst, .CodeSnippetContainerTabDisabledActive, .CodeSnippetContainerTabDisabledActiveNotFirst {
101 | 	height:19px;
102 | 	float:left;
103 | 	width:auto;
104 | 	border-top:solid 1px #bbb;
105 | 	border-bottom:solid 2px #d0d2d2;
106 | 	padding:0 12px 0 12px;
107 | 	background:#dfedfe
108 | }
109 | .CodeSnippetContainerTabDisabledActive A {
110 | 	FONT-WEIGHT:bold;
111 | 	COLOR:#e66a38;
112 | 	TEXT-DECORATION:none
113 | }
114 | .CodeSnippetContainerTabFirst {
115 | 	padding:0 12px 0 6px
116 | }
117 | .CodeSnippetContainerTabDisabled, .CodeSnippetContainerTabDisabledNotFirst {
118 | 	background:#dfedfe
119 | }
120 | .CodeSnippetContainerTabActive, .CodeSnippetContainerTabActiveNotFirst, .CodeSnippetContainerTabDisabledActive, .CodeSnippetContainerTabDisabledActiveNotFirst {
121 | 	background:#fff;
122 | 	border-bottom:solid 2px #fff
123 | }
124 | .CodeSnippetContainerTabUnrecognized {
125 | 	background:#dfedfe;
126 | 	border-bottom:solid 2px #fff
127 | }
128 | .CodeSnippetContainerTab, .CodeSnippetContainerTabUnrecognizedNotFirst, .CodeSnippetContainerTabActiveNotFirst, .CodeSnippetContainerTabDisabledNotFirst, .CodeSnippetContainerTabDisabledActiveNotFirst {
129 | 	border-left:solid 1px #929292
130 | }
131 | div.CodeSnippetContainerTabUnrecognized a, div.CodeSnippetContainerTabActive a, div.CodeSnippetContainerTabActiveNotFirst a, div.CodeSnippetContainerTabDisabledActiveNotFirst a {
132 | 	color:#e66a38;
133 | 	font-weight:bold;
134 | 	text-decoration:none
135 | }
136 | div.CodeSnippetContainerTab a, div.CodeSnippetContainerTab a:link, div.CodeSnippetContainerTab a:visited, div.CodeSnippetContainerTab a:active {
137 | 	color:#2178e0;
138 | 	font-weight:bold;
139 | 	text-decoration:none
140 | }
141 | div.CodeSnippetContainerTab a:hover {
142 | 	color:#e66a38
143 | }
144 | div.CodeSnippetContainerTabFirst a:link, div.CodeSnippetContainerTabFirst a:visited, div.CodeSnippetContainerTabFirst a:active {
145 | 	color:#2178e0;
146 | 	font-weight:bold;
147 | 	text-decoration:none
148 | }
149 | div.CodeSnippetContainerTabFirst a:hover {
150 | 	font-weight:bold;
151 | 	color:#e66a38
152 | }
153 | div.CodeSnippetContainerTabDisabled a, div.CodeSnippetContainerTabDisabledNotFirst a {
154 | 	color:#2178e0;
155 | 	text-decoration:none
156 | }
157 | div.CodeSnippetContainerTabDisabled a, div.CodeSnippetContainerTabDisabledNotFirst a {
158 | 	color:#2178e0;
159 | 	text-decoration:none
160 | }
161 | div.CodeSnippetContainerTabDisabledNotFirst a:hover {
162 | 	color:#e66a38
163 | }
164 | .CodeSnippetToolBar {
165 | 	width:auto;
166 | 	height:auto;
167 | 	border-top:solid 3px #e5e5e5;
168 | 	border-left:solid 1px #bbb;
169 | 	border-right:solid 3px #e5e5e5
170 | }
171 | .CodeSnippetToolBarText {
172 | 	float:right;
173 | 	top:-10px;
174 | 	position:relative;
175 | 	background-color:#fff;
176 | 	width:auto;
177 | 	margin-right:8px;
178 | 	padding-left:8px;
179 | 	padding-right:8px;
180 | 	height:0;
181 | 	z-index:20
182 | }
183 | div.CodeSnippetToolBarText a:link, div.CodeSnippetToolBarText a:visited, div.CodeSnippetToolBarText a:active {
184 | 	margin-left:5px;
185 | 	margin-right:5px;
186 | 	text-decoration:none;
187 | 	color:#2178e0;
188 | 	font-family:'Segoe UI', Verdana, Arial;
189 | 	font-size:10pt;
190 | 	background-color:White
191 | }
192 | div.CodeSnippetToolBarText a:hover {
193 | 	margin-left:5px;
194 | 	margin-right:5px;
195 | 	text-decoration:none;
196 | 	color:#e66a38;
197 | 	font-family:'Segoe UI', Verdana, Arial;
198 | 	font-size:10pt
199 | }
200 | .CodeSnippetContainerCodeCollection {
201 | 	border-left:solid 1px #bbb;
202 | 	border-bottom:solid 3px #e5e5e5;
203 | 	border-right:solid 3px #e5e5e5;
204 | 	clear:both;
205 | 	margin-bottom:12px;
206 | 	position:relative;
207 | 	top:-3px
208 | }
209 | .CodeSnippetContainerCode {
210 | 	font-size:1.1em;
211 | 	padding:0.8em;
212 | 	width:auto;
213 | 	margin:0
214 | }
215 | 


--------------------------------------------------------------------------------
/Documentation/html/styles/lw-miranda.css:
--------------------------------------------------------------------------------
 1 | div.imhistory
 2 | {
 3 |     border: 1px solid #BBB;
 4 | }
 5 | 
 6 | .imhistory-title 
 7 | {
 8 |     border-bottom: 1px solid #BBB;
 9 |     padding: 3px;
10 | }
11 | 
12 | 
13 | .imhistory-content
14 | {
15 |     margin: 3px;
16 | }


--------------------------------------------------------------------------------
/Documentation/html/styles/msdn10/Msdn10_vstudio-bn20091118.css:
--------------------------------------------------------------------------------
 1 | 
 2 | #JelloWrapper {
 3 | 	background:url('bg_vstudio.png') no-repeat 200px 0
 4 | }
 5 | 
 6 | * html .internav {
 7 | 	background-color:#21244a
 8 | }
 9 | 
10 | * html .internav a:hover {
11 | 	background-color:#181c39
12 | }
13 | 
14 | .internav a.active, .internav a.active:hover {
15 | 	background-color:#735aaf
16 | }
17 | 
18 | * html .internav a.active, * html .internav a.active:hover {
19 | 	background-color:#7359ad
20 | }
21 | 
22 | .LocalNavigation {
23 | 	background:url('subnav_vstudio.png') repeat-y top right
24 | }
25 | 
26 | * html .LocalNavigation {
27 | 	background-color:#7359ad;
28 | 	background-image:none
29 | }
30 | 
31 | .LocalNavigation .TabOff a:hover {
32 | 	background-color:#634d9c
33 | }
34 | 
35 | .LocalNavigation .TabOn {
36 | 	background-color:#4c3c79
37 | }
38 | 


--------------------------------------------------------------------------------
/Documentation/html/styles/msdn10/adart_repository.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/styles/msdn10/adart_repository.png


--------------------------------------------------------------------------------
/Documentation/html/styles/msdn10/bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/styles/msdn10/bg.png


--------------------------------------------------------------------------------
/Documentation/html/styles/msdn10/bg_vstudio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/styles/msdn10/bg_vstudio.png


--------------------------------------------------------------------------------
/Documentation/html/styles/msdn10/bullet.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/styles/msdn10/bullet.gif


--------------------------------------------------------------------------------
/Documentation/html/styles/msdn10/clear.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/styles/msdn10/clear.gif


--------------------------------------------------------------------------------
/Documentation/html/styles/msdn10/contentpane.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/styles/msdn10/contentpane.png


--------------------------------------------------------------------------------
/Documentation/html/styles/msdn10/contentpaneleft.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/styles/msdn10/contentpaneleft.png


--------------------------------------------------------------------------------
/Documentation/html/styles/msdn10/contentpaneright.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/styles/msdn10/contentpaneright.png


--------------------------------------------------------------------------------
/Documentation/html/styles/msdn10/internav.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/styles/msdn10/internav.png


--------------------------------------------------------------------------------
/Documentation/html/styles/msdn10/subnav_vstudio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rahvee/CBcrypt/83940b16ea794503f9966cbc3e04dfce7b4c1adf/Documentation/html/styles/msdn10/subnav_vstudio.png


--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
 1 | CBCrypt (https://www.cbcrypt.org) is MIT licensed (see below) and is
 2 | dependent on BouncyCastle (http://www.bouncycastle.org), which is also MIT 
 3 | licensed.  (http://www.bouncycastle.org/csharp/licence.html).  CBCrypt is 
 4 | also dependent on SCrypt (subset of CryptSharp) 
 5 | (http://www.zer7.com/software/cryptsharp) which is ISC licensed
 6 | (http://www.zer7.com/files/oss/cryptsharp/License.txt)
 7 | 
 8 | The MIT License (MIT)
 9 | 
10 | Copyright (c) 2014 Concept Blossom, Inc.
11 | 
12 | Permission is hereby granted, free of charge, to any person obtaining a copy
13 | of this software and associated documentation files (the "Software"), to deal
14 | in the Software without restriction, including without limitation the rights
15 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16 | copies of the Software, and to permit persons to whom the Software is
17 | furnished to do so, subject to the following conditions:
18 | 
19 | The above copyright notice and this permission notice shall be included in all
20 | copies or substantial portions of the Software.
21 | 
22 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28 | SOFTWARE.
29 | 


--------------------------------------------------------------------------------