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

Side by Side Diff: base/crypto/signature_creator_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_creator.h" 5 #include "base/crypto/signature_creator.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 #include "base/scoped_ptr.h" 11 #include "base/scoped_ptr.h"
12 12
13 namespace base { 13 namespace base {
14 14
15 // static 15 // static
16 SignatureCreator* SignatureCreator::Create(RSAPrivateKey* key) { 16 SignatureCreator* SignatureCreator::Create(RSAPrivateKey* key) {
17 scoped_ptr<SignatureCreator> result(new SignatureCreator); 17 scoped_ptr<SignatureCreator> result(new SignatureCreator);
18 result->key_ = key; 18 result->key_ = key;
19 19
20 CSSM_RETURN crtn; 20 CSSM_RETURN crtn;
21 crtn = CSSM_CSP_CreateSignatureContext(result->csp_handle_, 21 crtn = CSSM_CSP_CreateSignatureContext(GetSharedCSPHandle(),
22 CSSM_ALGID_SHA1WithRSA, 22 CSSM_ALGID_SHA1WithRSA,
23 NULL, 23 NULL,
24 key->key(), 24 key->key(),
25 &result->sig_handle_); 25 &result->sig_handle_);
26 if (crtn) { 26 if (crtn) {
27 NOTREACHED(); 27 NOTREACHED();
28 return NULL; 28 return NULL;
29 } 29 }
30 30
31 crtn = CSSM_SignDataInit(result->sig_handle_); 31 crtn = CSSM_SignDataInit(result->sig_handle_);
32 if (crtn) { 32 if (crtn) {
33 NOTREACHED(); 33 NOTREACHED();
34 return false; 34 return false;
35 } 35 }
36 36
37 return result.release(); 37 return result.release();
38 } 38 }
39 39
40 SignatureCreator::SignatureCreator() : csp_handle_(0), sig_handle_(0) { 40 SignatureCreator::SignatureCreator() : sig_handle_(0) {
41 EnsureCSSMInit(); 41 EnsureCSSMInit();
42
43 static CSSM_VERSION version = {2, 0};
44 CSSM_RETURN crtn;
45 crtn = CSSM_ModuleAttach(&gGuidAppleCSP, &version, &kCssmMemoryFunctions, 0,
46 CSSM_SERVICE_CSP, 0, CSSM_KEY_HIERARCHY_NONE,
47 NULL, 0, NULL, &csp_handle_);
48 DCHECK(crtn == CSSM_OK);
49 } 42 }
50 43
51 SignatureCreator::~SignatureCreator() { 44 SignatureCreator::~SignatureCreator() {
52 CSSM_RETURN crtn; 45 CSSM_RETURN crtn;
53 if (sig_handle_) { 46 if (sig_handle_) {
54 crtn = CSSM_DeleteContext(sig_handle_); 47 crtn = CSSM_DeleteContext(sig_handle_);
55 DCHECK(crtn == CSSM_OK); 48 DCHECK(crtn == CSSM_OK);
56 } 49 }
57
58 if (csp_handle_) {
59 CSSM_RETURN crtn = CSSM_ModuleDetach(csp_handle_);
60 DCHECK(crtn == CSSM_OK);
61 }
62 } 50 }
63 51
64 bool SignatureCreator::Update(const uint8* data_part, int data_part_len) { 52 bool SignatureCreator::Update(const uint8* data_part, int data_part_len) {
65 CSSM_DATA data; 53 CSSM_DATA data;
66 data.Data = const_cast<uint8*>(data_part); 54 data.Data = const_cast<uint8*>(data_part);
67 data.Length = data_part_len; 55 data.Length = data_part_len;
68 CSSM_RETURN crtn = CSSM_SignDataUpdate(sig_handle_, &data, 1); 56 CSSM_RETURN crtn = CSSM_SignDataUpdate(sig_handle_, &data, 1);
69 DCHECK(crtn == CSSM_OK); 57 DCHECK(crtn == CSSM_OK);
70 return true; 58 return true;
71 } 59 }
72 60
73 bool SignatureCreator::Final(std::vector<uint8>* signature) { 61 bool SignatureCreator::Final(std::vector<uint8>* signature) {
74 CSSM_DATA sig; 62 CSSM_DATA sig;
75 memset(&sig, 0, sizeof(CSSM_DATA)); // Allow CSSM allocate memory; 63 memset(&sig, 0, sizeof(CSSM_DATA)); // Allow CSSM allocate memory;
76 CSSM_RETURN crtn = CSSM_SignDataFinal(sig_handle_, &sig); 64 CSSM_RETURN crtn = CSSM_SignDataFinal(sig_handle_, &sig);
77 65
78 if (crtn) { 66 if (crtn) {
79 NOTREACHED(); 67 NOTREACHED();
80 return false; 68 return false;
81 } 69 }
82 70
83 signature->assign(sig.Data, sig.Data + sig.Length); 71 signature->assign(sig.Data, sig.Data + sig.Length);
84 kCssmMemoryFunctions.free_func(sig.Data, NULL); // Release data alloc'd 72 kCssmMemoryFunctions.free_func(sig.Data, NULL); // Release data alloc'd
85 // by CSSM 73 // by CSSM
86 74
87 return true; 75 return true;
88 } 76 }
89 77
90 } // namespace base 78 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698