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

Side by Side Diff: base/crypto/signature_verifier_mac.cc

Issue 1347002: Add Mac implementations of new SymmetricKey and Encryptor classes. (Closed)
Patch Set: Responding to feedback Created 10 years, 9 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 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 "base/crypto/signature_verifier.h" 5 #include "base/crypto/signature_verifier.h"
6 6
7 #include <stdlib.h> 7 #include <stdlib.h>
8 8
9 #include "base/crypto/cssm_init.h" 9 #include "base/crypto/cssm_init.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 11
12 namespace base { 12 namespace base {
13 13
14 SignatureVerifier::SignatureVerifier() : csp_handle_(0), sig_handle_(0) { 14 SignatureVerifier::SignatureVerifier() : sig_handle_(0) {
15 EnsureCSSMInit(); 15 EnsureCSSMInit();
16
17 static CSSM_VERSION version = {2, 0};
18 CSSM_RETURN crtn;
19 crtn = CSSM_ModuleAttach(&gGuidAppleCSP, &version, &kCssmMemoryFunctions, 0,
20 CSSM_SERVICE_CSP, 0, CSSM_KEY_HIERARCHY_NONE,
21 NULL, 0, NULL, &csp_handle_);
22 DCHECK(crtn == CSSM_OK);
23 } 16 }
24 17
25 SignatureVerifier::~SignatureVerifier() { 18 SignatureVerifier::~SignatureVerifier() {
26 Reset(); 19 Reset();
27 if (csp_handle_) {
28 CSSM_RETURN crtn = CSSM_ModuleDetach(csp_handle_);
29 DCHECK(crtn == CSSM_OK);
30 }
31 } 20 }
32 21
33 bool SignatureVerifier::VerifyInit(const uint8* signature_algorithm, 22 bool SignatureVerifier::VerifyInit(const uint8* signature_algorithm,
34 int signature_algorithm_len, 23 int signature_algorithm_len,
35 const uint8* signature, 24 const uint8* signature,
36 int signature_len, 25 int signature_len,
37 const uint8* public_key_info, 26 const uint8* public_key_info,
38 int public_key_info_len) { 27 int public_key_info_len) {
39 signature_.assign(signature, signature + signature_len); 28 signature_.assign(signature, signature + signature_len);
40 public_key_info_.assign(public_key_info, 29 public_key_info_.assign(public_key_info,
41 public_key_info + public_key_info_len); 30 public_key_info + public_key_info_len);
42 31
43 CSSM_ALGORITHMS key_alg = CSSM_ALGID_RSA; // TODO(wtc): hardcoded. 32 CSSM_ALGORITHMS key_alg = CSSM_ALGID_RSA; // TODO(wtc): hardcoded.
44 33
45 memset(&public_key_, 0, sizeof(public_key_)); 34 memset(&public_key_, 0, sizeof(public_key_));
46 public_key_.KeyData.Data = const_cast<uint8*>(&public_key_info_[0]); 35 public_key_.KeyData.Data = const_cast<uint8*>(&public_key_info_[0]);
47 public_key_.KeyData.Length = public_key_info_.size(); 36 public_key_.KeyData.Length = public_key_info_.size();
48 public_key_.KeyHeader.HeaderVersion = CSSM_KEYHEADER_VERSION; 37 public_key_.KeyHeader.HeaderVersion = CSSM_KEYHEADER_VERSION;
49 public_key_.KeyHeader.BlobType = CSSM_KEYBLOB_RAW; 38 public_key_.KeyHeader.BlobType = CSSM_KEYBLOB_RAW;
50 public_key_.KeyHeader.Format = CSSM_KEYBLOB_RAW_FORMAT_X509; 39 public_key_.KeyHeader.Format = CSSM_KEYBLOB_RAW_FORMAT_X509;
51 public_key_.KeyHeader.AlgorithmId = key_alg; 40 public_key_.KeyHeader.AlgorithmId = key_alg;
52 public_key_.KeyHeader.KeyClass = CSSM_KEYCLASS_PUBLIC_KEY; 41 public_key_.KeyHeader.KeyClass = CSSM_KEYCLASS_PUBLIC_KEY;
53 public_key_.KeyHeader.KeyAttr = CSSM_KEYATTR_EXTRACTABLE; 42 public_key_.KeyHeader.KeyAttr = CSSM_KEYATTR_EXTRACTABLE;
54 public_key_.KeyHeader.KeyUsage = CSSM_KEYUSE_VERIFY; 43 public_key_.KeyHeader.KeyUsage = CSSM_KEYUSE_VERIFY;
55 CSSM_KEY_SIZE key_size; 44 CSSM_KEY_SIZE key_size;
56 CSSM_RETURN crtn; 45 CSSM_RETURN crtn;
57 crtn = CSSM_QueryKeySizeInBits(csp_handle_, NULL, &public_key_, &key_size); 46 crtn = CSSM_QueryKeySizeInBits(GetSharedCSPHandle(), NULL,
47 &public_key_, &key_size);
58 if (crtn) { 48 if (crtn) {
59 NOTREACHED() << "CSSM_QueryKeySizeInBits failed: " << crtn; 49 NOTREACHED() << "CSSM_QueryKeySizeInBits failed: " << crtn;
60 return false; 50 return false;
61 } 51 }
62 public_key_.KeyHeader.LogicalKeySizeInBits = key_size.LogicalKeySizeInBits; 52 public_key_.KeyHeader.LogicalKeySizeInBits = key_size.LogicalKeySizeInBits;
63 53
64 // TODO(wtc): decode signature_algorithm... 54 // TODO(wtc): decode signature_algorithm...
65 CSSM_ALGORITHMS sig_alg = CSSM_ALGID_SHA1WithRSA; 55 CSSM_ALGORITHMS sig_alg = CSSM_ALGID_SHA1WithRSA;
66 56
67 crtn = CSSM_CSP_CreateSignatureContext(csp_handle_, sig_alg, NULL, 57 crtn = CSSM_CSP_CreateSignatureContext(GetSharedCSPHandle(), sig_alg, NULL,
68 &public_key_, &sig_handle_); 58 &public_key_, &sig_handle_);
69 if (crtn) { 59 if (crtn) {
70 NOTREACHED(); 60 NOTREACHED();
71 return false; 61 return false;
72 } 62 }
73 crtn = CSSM_VerifyDataInit(sig_handle_); 63 crtn = CSSM_VerifyDataInit(sig_handle_);
74 if (crtn) { 64 if (crtn) {
75 NOTREACHED(); 65 NOTREACHED();
76 return false; 66 return false;
77 } 67 }
(...skipping 28 matching lines...) Expand all
106 sig_handle_ = 0; 96 sig_handle_ = 0;
107 } 97 }
108 signature_.clear(); 98 signature_.clear();
109 99
110 // Can't call CSSM_FreeKey on public_key_ because we constructed 100 // Can't call CSSM_FreeKey on public_key_ because we constructed
111 // public_key_ manually. 101 // public_key_ manually.
112 } 102 }
113 103
114 } // namespace base 104 } // namespace base
115 105
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698