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

Side by Side Diff: Source/bindings/v8/SerializedScriptValue.cpp

Issue 248963006: [webcrypto] Add key usage for 'deriveBits' (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | Source/modules/crypto/Key.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010 Google Inc. All rights reserved. 2 * Copyright (C) 2010 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 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 // it fits conveniently into this bitfield. 286 // it fits conveniently into this bitfield.
287 ExtractableUsage = 1 << 0, 287 ExtractableUsage = 1 << 0,
288 288
289 EncryptUsage = 1 << 1, 289 EncryptUsage = 1 << 1,
290 DecryptUsage = 1 << 2, 290 DecryptUsage = 1 << 2,
291 SignUsage = 1 << 3, 291 SignUsage = 1 << 3,
292 VerifyUsage = 1 << 4, 292 VerifyUsage = 1 << 4,
293 DeriveKeyUsage = 1 << 5, 293 DeriveKeyUsage = 1 << 5,
294 WrapKeyUsage = 1 << 6, 294 WrapKeyUsage = 1 << 6,
295 UnwrapKeyUsage = 1 << 7, 295 UnwrapKeyUsage = 1 << 7,
296 DeriveBitsUsage = 1 << 8,
296 // Maximum allowed value is 1 << 31 297 // Maximum allowed value is 1 << 31
297 }; 298 };
298 299
299 static bool shouldCheckForCycles(int depth) 300 static bool shouldCheckForCycles(int depth)
300 { 301 {
301 ASSERT(depth >= 0); 302 ASSERT(depth >= 0);
302 // Since we are not required to spot the cycle as soon as it 303 // Since we are not required to spot the cycle as soon as it
303 // happens we can check for cycles only when the current depth 304 // happens we can check for cycles only when the current depth
304 // is a power of two. 305 // is a power of two.
305 return !(depth & (depth - 1)); 306 return !(depth & (depth - 1));
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 return doWriteUint32(AesCtrTag); 787 return doWriteUint32(AesCtrTag);
787 case blink::WebCryptoAlgorithmIdAesKw: 788 case blink::WebCryptoAlgorithmIdAesKw:
788 return doWriteUint32(AesKwTag); 789 return doWriteUint32(AesKwTag);
789 } 790 }
790 ASSERT_NOT_REACHED(); 791 ASSERT_NOT_REACHED();
791 } 792 }
792 793
793 void doWriteKeyUsages(const blink::WebCryptoKeyUsageMask usages, bool extrac table) 794 void doWriteKeyUsages(const blink::WebCryptoKeyUsageMask usages, bool extrac table)
794 { 795 {
795 // Reminder to update this when adding new key usages. 796 // Reminder to update this when adding new key usages.
796 COMPILE_ASSERT(blink::EndOfWebCryptoKeyUsage == (1 << 6) + 1, UpdateMe); 797 COMPILE_ASSERT(blink::EndOfWebCryptoKeyUsage == (1 << 7) + 1, UpdateMe);
797 798
798 uint32_t value = 0; 799 uint32_t value = 0;
799 800
800 if (extractable) 801 if (extractable)
801 value |= ExtractableUsage; 802 value |= ExtractableUsage;
802 803
803 if (usages & blink::WebCryptoKeyUsageEncrypt) 804 if (usages & blink::WebCryptoKeyUsageEncrypt)
804 value |= EncryptUsage; 805 value |= EncryptUsage;
805 if (usages & blink::WebCryptoKeyUsageDecrypt) 806 if (usages & blink::WebCryptoKeyUsageDecrypt)
806 value |= DecryptUsage; 807 value |= DecryptUsage;
807 if (usages & blink::WebCryptoKeyUsageSign) 808 if (usages & blink::WebCryptoKeyUsageSign)
808 value |= SignUsage; 809 value |= SignUsage;
809 if (usages & blink::WebCryptoKeyUsageVerify) 810 if (usages & blink::WebCryptoKeyUsageVerify)
810 value |= VerifyUsage; 811 value |= VerifyUsage;
811 if (usages & blink::WebCryptoKeyUsageDeriveKey) 812 if (usages & blink::WebCryptoKeyUsageDeriveKey)
812 value |= DeriveKeyUsage; 813 value |= DeriveKeyUsage;
813 if (usages & blink::WebCryptoKeyUsageWrapKey) 814 if (usages & blink::WebCryptoKeyUsageWrapKey)
814 value |= WrapKeyUsage; 815 value |= WrapKeyUsage;
815 if (usages & blink::WebCryptoKeyUsageUnwrapKey) 816 if (usages & blink::WebCryptoKeyUsageUnwrapKey)
816 value |= UnwrapKeyUsage; 817 value |= UnwrapKeyUsage;
818 if (usages & blink::WebCryptoKeyUsageDeriveBits)
819 value |= DeriveBitsUsage;
817 820
818 doWriteUint32(value); 821 doWriteUint32(value);
819 } 822 }
820 823
821 int bytesNeededToWireEncode(uint32_t value) 824 int bytesNeededToWireEncode(uint32_t value)
822 { 825 {
823 int bytes = 1; 826 int bytes = 1;
824 while (true) { 827 while (true) {
825 value >>= varIntShift; 828 value >>= varIntShift;
826 if (!value) 829 if (!value)
(...skipping 1674 matching lines...) Expand 10 before | Expand all | Expand 10 after
2501 id = blink::WebCryptoAlgorithmIdAesKw; 2504 id = blink::WebCryptoAlgorithmIdAesKw;
2502 return true; 2505 return true;
2503 } 2506 }
2504 2507
2505 return false; 2508 return false;
2506 } 2509 }
2507 2510
2508 bool doReadKeyUsages(blink::WebCryptoKeyUsageMask& usages, bool& extractable ) 2511 bool doReadKeyUsages(blink::WebCryptoKeyUsageMask& usages, bool& extractable )
2509 { 2512 {
2510 // Reminder to update this when adding new key usages. 2513 // Reminder to update this when adding new key usages.
2511 COMPILE_ASSERT(blink::EndOfWebCryptoKeyUsage == (1 << 6) + 1, UpdateMe); 2514 COMPILE_ASSERT(blink::EndOfWebCryptoKeyUsage == (1 << 7) + 1, UpdateMe);
2512 const uint32_t allPossibleUsages = ExtractableUsage | EncryptUsage | Dec ryptUsage | SignUsage | VerifyUsage | DeriveKeyUsage | WrapKeyUsage | UnwrapKeyU sage; 2515 const uint32_t allPossibleUsages = ExtractableUsage | EncryptUsage | Dec ryptUsage | SignUsage | VerifyUsage | DeriveKeyUsage | WrapKeyUsage | UnwrapKeyU sage | DeriveBitsUsage;
2513 2516
2514 uint32_t rawUsages; 2517 uint32_t rawUsages;
2515 if (!doReadUint32(&rawUsages)) 2518 if (!doReadUint32(&rawUsages))
2516 return false; 2519 return false;
2517 2520
2518 // Make sure it doesn't contain an unrecognized usage value. 2521 // Make sure it doesn't contain an unrecognized usage value.
2519 if (rawUsages & ~allPossibleUsages) 2522 if (rawUsages & ~allPossibleUsages)
2520 return false; 2523 return false;
2521 2524
2522 usages = 0; 2525 usages = 0;
2523 2526
2524 extractable = rawUsages & ExtractableUsage; 2527 extractable = rawUsages & ExtractableUsage;
2525 2528
2526 if (rawUsages & EncryptUsage) 2529 if (rawUsages & EncryptUsage)
2527 usages |= blink::WebCryptoKeyUsageEncrypt; 2530 usages |= blink::WebCryptoKeyUsageEncrypt;
2528 if (rawUsages & DecryptUsage) 2531 if (rawUsages & DecryptUsage)
2529 usages |= blink::WebCryptoKeyUsageDecrypt; 2532 usages |= blink::WebCryptoKeyUsageDecrypt;
2530 if (rawUsages & SignUsage) 2533 if (rawUsages & SignUsage)
2531 usages |= blink::WebCryptoKeyUsageSign; 2534 usages |= blink::WebCryptoKeyUsageSign;
2532 if (rawUsages & VerifyUsage) 2535 if (rawUsages & VerifyUsage)
2533 usages |= blink::WebCryptoKeyUsageVerify; 2536 usages |= blink::WebCryptoKeyUsageVerify;
2534 if (rawUsages & DeriveKeyUsage) 2537 if (rawUsages & DeriveKeyUsage)
2535 usages |= blink::WebCryptoKeyUsageDeriveKey; 2538 usages |= blink::WebCryptoKeyUsageDeriveKey;
2536 if (rawUsages & WrapKeyUsage) 2539 if (rawUsages & WrapKeyUsage)
2537 usages |= blink::WebCryptoKeyUsageWrapKey; 2540 usages |= blink::WebCryptoKeyUsageWrapKey;
2538 if (rawUsages & UnwrapKeyUsage) 2541 if (rawUsages & UnwrapKeyUsage)
2539 usages |= blink::WebCryptoKeyUsageUnwrapKey; 2542 usages |= blink::WebCryptoKeyUsageUnwrapKey;
2543 if (rawUsages & DeriveBitsUsage)
2544 usages |= blink::WebCryptoKeyUsageDeriveBits;
2540 2545
2541 return true; 2546 return true;
2542 } 2547 }
2543 2548
2544 const uint8_t* m_buffer; 2549 const uint8_t* m_buffer;
2545 const unsigned m_length; 2550 const unsigned m_length;
2546 unsigned m_position; 2551 unsigned m_position;
2547 uint32_t m_version; 2552 uint32_t m_version;
2548 v8::Isolate* m_isolate; 2553 v8::Isolate* m_isolate;
2549 const WebBlobInfoArray* m_blobInfo; 2554 const WebBlobInfoArray* m_blobInfo;
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after
3054 // If the allocated memory was not registered before, then this class is lik ely 3059 // If the allocated memory was not registered before, then this class is lik ely
3055 // used in a context other then Worker's onmessage environment and the prese nce of 3060 // used in a context other then Worker's onmessage environment and the prese nce of
3056 // current v8 context is not guaranteed. Avoid calling v8 then. 3061 // current v8 context is not guaranteed. Avoid calling v8 then.
3057 if (m_externallyAllocatedMemory) { 3062 if (m_externallyAllocatedMemory) {
3058 ASSERT(v8::Isolate::GetCurrent()); 3063 ASSERT(v8::Isolate::GetCurrent());
3059 v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(-m_exte rnallyAllocatedMemory); 3064 v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(-m_exte rnallyAllocatedMemory);
3060 } 3065 }
3061 } 3066 }
3062 3067
3063 } // namespace WebCore 3068 } // namespace WebCore
OLDNEW
« no previous file with comments | « no previous file | Source/modules/crypto/Key.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698