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

Side by Side Diff: content/child/webcrypto/openssl/aes_gcm_openssl.cc

Issue 401153002: Switch to BoringSSL. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase across DEPS change Created 6 years, 5 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 | « chrome/common/net/BUILD.gn ('k') | content/child/webcrypto/openssl/rsa_key_openssl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <vector> 5 #include <vector>
6 #include <openssl/evp.h> 6 #include <openssl/evp.h>
7 7
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "content/child/webcrypto/crypto_data.h" 9 #include "content/child/webcrypto/crypto_data.h"
10 #include "content/child/webcrypto/openssl/aes_key_openssl.h" 10 #include "content/child/webcrypto/openssl/aes_key_openssl.h"
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 Uint8VectorStart(raw_key), 64 Uint8VectorStart(raw_key),
65 raw_key.size(), 65 raw_key.size(),
66 tag_length_bytes, 66 tag_length_bytes,
67 NULL)) { 67 NULL)) {
68 return Status::OperationError(); 68 return Status::OperationError();
69 } 69 }
70 70
71 crypto::ScopedOpenSSL<EVP_AEAD_CTX, EVP_AEAD_CTX_cleanup>::Type ctx_cleanup( 71 crypto::ScopedOpenSSL<EVP_AEAD_CTX, EVP_AEAD_CTX_cleanup>::Type ctx_cleanup(
72 &ctx); 72 &ctx);
73 73
74 ssize_t len; 74 size_t len;
75 int ok;
75 76
76 if (mode == DECRYPT) { 77 if (mode == DECRYPT) {
77 if (data.byte_length() < tag_length_bytes) 78 if (data.byte_length() < tag_length_bytes)
78 return Status::ErrorDataTooSmall(); 79 return Status::ErrorDataTooSmall();
79 80
80 buffer->resize(data.byte_length() - tag_length_bytes); 81 buffer->resize(data.byte_length() - tag_length_bytes);
81 82
82 len = EVP_AEAD_CTX_open(&ctx, 83 ok = EVP_AEAD_CTX_open(&ctx,
83 Uint8VectorStart(buffer), 84 Uint8VectorStart(buffer),
84 buffer->size(), 85 &len,
85 iv.bytes(), 86 buffer->size(),
86 iv.byte_length(), 87 iv.bytes(),
87 data.bytes(), 88 iv.byte_length(),
88 data.byte_length(), 89 data.bytes(),
89 additional_data.bytes(), 90 data.byte_length(),
90 additional_data.byte_length()); 91 additional_data.bytes(),
92 additional_data.byte_length());
91 } else { 93 } else {
92 // No need to check for unsigned integer overflow here (seal fails if 94 // No need to check for unsigned integer overflow here (seal fails if
93 // the output buffer is too small). 95 // the output buffer is too small).
94 buffer->resize(data.byte_length() + tag_length_bytes); 96 buffer->resize(data.byte_length() + tag_length_bytes);
95 97
96 len = EVP_AEAD_CTX_seal(&ctx, 98 ok = EVP_AEAD_CTX_seal(&ctx,
97 Uint8VectorStart(buffer), 99 Uint8VectorStart(buffer),
98 buffer->size(), 100 &len,
99 iv.bytes(), 101 buffer->size(),
100 iv.byte_length(), 102 iv.bytes(),
101 data.bytes(), 103 iv.byte_length(),
102 data.byte_length(), 104 data.bytes(),
103 additional_data.bytes(), 105 data.byte_length(),
104 additional_data.byte_length()); 106 additional_data.bytes(),
107 additional_data.byte_length());
105 } 108 }
106 109
107 if (len < 0) 110 if (!ok)
108 return Status::OperationError(); 111 return Status::OperationError();
109 buffer->resize(len); 112 buffer->resize(len);
110 return Status::Success(); 113 return Status::Success();
111 } 114 }
112 115
113 class AesGcmImplementation : public AesAlgorithm { 116 class AesGcmImplementation : public AesAlgorithm {
114 public: 117 public:
115 AesGcmImplementation() : AesAlgorithm("GCM") {} 118 AesGcmImplementation() : AesAlgorithm("GCM") {}
116 119
117 virtual Status Encrypt(const blink::WebCryptoAlgorithm& algorithm, 120 virtual Status Encrypt(const blink::WebCryptoAlgorithm& algorithm,
(...skipping 13 matching lines...) Expand all
131 134
132 } // namespace 135 } // namespace
133 136
134 AlgorithmImplementation* CreatePlatformAesGcmImplementation() { 137 AlgorithmImplementation* CreatePlatformAesGcmImplementation() {
135 return new AesGcmImplementation; 138 return new AesGcmImplementation;
136 } 139 }
137 140
138 } // namespace webcrypto 141 } // namespace webcrypto
139 142
140 } // namespace content 143 } // namespace content
OLDNEW
« no previous file with comments | « chrome/common/net/BUILD.gn ('k') | content/child/webcrypto/openssl/rsa_key_openssl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698