Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(183)

Side by Side Diff: Source/modules/crypto/NormalizeAlgorithm.cpp

Issue 789733009: Implement HKDF for WebCrypto (blink-side) (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: move ASSERT(), add break Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 60
61 #if ENABLE(ASSERT) 61 #if ENABLE(ASSERT)
62 bool operator<(const AlgorithmNameMapping&) const; 62 bool operator<(const AlgorithmNameMapping&) const;
63 #endif 63 #endif
64 }; 64 };
65 65
66 // Must be sorted by length, and then by reverse string. 66 // Must be sorted by length, and then by reverse string.
67 // Also all names must be upper case ASCII. 67 // Also all names must be upper case ASCII.
68 const AlgorithmNameMapping algorithmNameMappings[] = { 68 const AlgorithmNameMapping algorithmNameMappings[] = {
69 {"HMAC", 4, WebCryptoAlgorithmIdHmac}, 69 {"HMAC", 4, WebCryptoAlgorithmIdHmac},
70 {"HKDF", 4, WebCryptoAlgorithmIdHkdf},
70 {"ECDH", 4, WebCryptoAlgorithmIdEcdh}, 71 {"ECDH", 4, WebCryptoAlgorithmIdEcdh},
71 {"SHA-1", 5, WebCryptoAlgorithmIdSha1}, 72 {"SHA-1", 5, WebCryptoAlgorithmIdSha1},
72 {"ECDSA", 5, WebCryptoAlgorithmIdEcdsa}, 73 {"ECDSA", 5, WebCryptoAlgorithmIdEcdsa},
73 {"AES-KW", 6, WebCryptoAlgorithmIdAesKw}, 74 {"AES-KW", 6, WebCryptoAlgorithmIdAesKw},
74 {"SHA-512", 7, WebCryptoAlgorithmIdSha512}, 75 {"SHA-512", 7, WebCryptoAlgorithmIdSha512},
75 {"SHA-384", 7, WebCryptoAlgorithmIdSha384}, 76 {"SHA-384", 7, WebCryptoAlgorithmIdSha384},
76 {"SHA-256", 7, WebCryptoAlgorithmIdSha256}, 77 {"SHA-256", 7, WebCryptoAlgorithmIdSha256},
77 {"AES-CBC", 7, WebCryptoAlgorithmIdAesCbc}, 78 {"AES-CBC", 7, WebCryptoAlgorithmIdAesCbc},
78 {"AES-GCM", 7, WebCryptoAlgorithmIdAesGcm}, 79 {"AES-GCM", 7, WebCryptoAlgorithmIdAesGcm},
79 {"AES-CTR", 7, WebCryptoAlgorithmIdAesCtr}, 80 {"AES-CTR", 7, WebCryptoAlgorithmIdAesCtr},
(...skipping 686 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 bool parseAesDerivedKeyParams(const Dictionary& raw, OwnPtr<WebCryptoAlgorithmPa rams>& params, const ErrorContext& context, AlgorithmError* error) 767 bool parseAesDerivedKeyParams(const Dictionary& raw, OwnPtr<WebCryptoAlgorithmPa rams>& params, const ErrorContext& context, AlgorithmError* error)
767 { 768 {
768 uint16_t length; 769 uint16_t length;
769 if (!getUint16(raw, "length", length, context, error)) 770 if (!getUint16(raw, "length", length, context, error))
770 return false; 771 return false;
771 772
772 params = adoptPtr(new WebCryptoAesDerivedKeyParams(length)); 773 params = adoptPtr(new WebCryptoAesDerivedKeyParams(length));
773 return true; 774 return true;
774 } 775 }
775 776
777 // FIXME: once the spec has been updated, check that the implementation is
778 // still correct and update this comment. http://crbug.com/399095
779 //
780 // The WebCrypto spec hasn't been updated yet to define HKDF
781 // (https://www.w3.org/Bugs/Public/show_bug.cgi?id=27425). The assumed
782 // parameters are:
783 //
784 // dictionary HkdfParams : Algorithm {
785 // required HashAlgorithmIdentifier hash;
786 // required BufferSource salt;
787 // required BufferSource info;
788 // };
789 bool parseHkdfParams(const Dictionary& raw, OwnPtr<WebCryptoAlgorithmParams>& pa rams, const ErrorContext& context, AlgorithmError* error)
790 {
791 WebCryptoAlgorithm hash;
792 if (!parseHash(raw, hash, context, error))
793 return false;
794 BufferSource saltBufferSource;
795 if (!getBufferSource(raw, "salt", saltBufferSource, context, error))
796 return false;
797 BufferSource infoBufferSource;
798 if (!getBufferSource(raw, "info", infoBufferSource, context, error))
799 return false;
800
801 DOMArrayPiece salt(saltBufferSource);
802 DOMArrayPiece info(infoBufferSource);
803
804 params = adoptPtr(new WebCryptoHkdfParams(hash, salt.bytes(), salt.byteLengt h(), info.bytes(), info.byteLength()));
805 return true;
806 }
807
776 bool parseAlgorithmParams(const Dictionary& raw, WebCryptoAlgorithmParamsType ty pe, OwnPtr<WebCryptoAlgorithmParams>& params, ErrorContext& context, AlgorithmEr ror* error) 808 bool parseAlgorithmParams(const Dictionary& raw, WebCryptoAlgorithmParamsType ty pe, OwnPtr<WebCryptoAlgorithmParams>& params, ErrorContext& context, AlgorithmEr ror* error)
777 { 809 {
778 switch (type) { 810 switch (type) {
779 case WebCryptoAlgorithmParamsTypeNone: 811 case WebCryptoAlgorithmParamsTypeNone:
780 return true; 812 return true;
781 case WebCryptoAlgorithmParamsTypeAesCbcParams: 813 case WebCryptoAlgorithmParamsTypeAesCbcParams:
782 context.add("AesCbcParams"); 814 context.add("AesCbcParams");
783 return parseAesCbcParams(raw, params, context, error); 815 return parseAesCbcParams(raw, params, context, error);
784 case WebCryptoAlgorithmParamsTypeAesKeyGenParams: 816 case WebCryptoAlgorithmParamsTypeAesKeyGenParams:
785 context.add("AesKeyGenParams"); 817 context.add("AesKeyGenParams");
(...skipping 30 matching lines...) Expand all
816 return parseEcKeyGenParams(raw, params, context, error); 848 return parseEcKeyGenParams(raw, params, context, error);
817 case WebCryptoAlgorithmParamsTypeEcKeyImportParams: 849 case WebCryptoAlgorithmParamsTypeEcKeyImportParams:
818 context.add("EcKeyImportParams"); 850 context.add("EcKeyImportParams");
819 return parseEcKeyImportParams(raw, params, context, error); 851 return parseEcKeyImportParams(raw, params, context, error);
820 case WebCryptoAlgorithmParamsTypeEcdhKeyDeriveParams: 852 case WebCryptoAlgorithmParamsTypeEcdhKeyDeriveParams:
821 context.add("EcdhKeyDeriveParams"); 853 context.add("EcdhKeyDeriveParams");
822 return parseEcdhKeyDeriveParams(raw, params, context, error); 854 return parseEcdhKeyDeriveParams(raw, params, context, error);
823 case WebCryptoAlgorithmParamsTypeAesDerivedKeyParams: 855 case WebCryptoAlgorithmParamsTypeAesDerivedKeyParams:
824 context.add("AesDerivedKeyParams"); 856 context.add("AesDerivedKeyParams");
825 return parseAesDerivedKeyParams(raw, params, context, error); 857 return parseAesDerivedKeyParams(raw, params, context, error);
858 case WebCryptoAlgorithmParamsTypeHkdfParams:
859 context.add("HkdfParams");
860 return parseHkdfParams(raw, params, context, error);
826 } 861 }
827 ASSERT_NOT_REACHED(); 862 ASSERT_NOT_REACHED();
828 return false; 863 return false;
829 } 864 }
830 865
831 const char* operationToString(WebCryptoOperation op) 866 const char* operationToString(WebCryptoOperation op)
832 { 867 {
833 switch (op) { 868 switch (op) {
834 case WebCryptoOperationEncrypt: 869 case WebCryptoOperationEncrypt:
835 return "encrypt"; 870 return "encrypt";
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
913 } 948 }
914 949
915 } // namespace 950 } // namespace
916 951
917 bool normalizeAlgorithm(const AlgorithmIdentifier& raw, WebCryptoOperation op, W ebCryptoAlgorithm& algorithm, AlgorithmError* error) 952 bool normalizeAlgorithm(const AlgorithmIdentifier& raw, WebCryptoOperation op, W ebCryptoAlgorithm& algorithm, AlgorithmError* error)
918 { 953 {
919 return parseAlgorithmIdentifier(raw, op, algorithm, ErrorContext(), error); 954 return parseAlgorithmIdentifier(raw, op, algorithm, ErrorContext(), error);
920 } 955 }
921 956
922 } // namespace blink 957 } // namespace blink
OLDNEW
« no previous file with comments | « Source/bindings/modules/v8/ScriptValueSerializerForModules.cpp ('k') | Source/platform/exported/WebCryptoAlgorithm.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698