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

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

Issue 259026: Implement signature_creator_mac (Closed)
Patch Set: cr change Created 11 years, 2 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
« no previous file with comments | « base/crypto/signature_creator.h ('k') | base/crypto/signature_verifier_mac.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "base/crypto/signature_creator.h"
6
7 #include <stdlib.h>
8
9 #include "base/crypto/cssm_init.h"
10 #include "base/logging.h"
11 #include "base/scoped_ptr.h"
12
13 namespace base {
14
15 // static
16 SignatureCreator* SignatureCreator::Create(RSAPrivateKey* key) {
17 scoped_ptr<SignatureCreator> result(new SignatureCreator);
18 result->key_ = key;
19
20 CSSM_RETURN crtn;
21 crtn = CSSM_CSP_CreateSignatureContext(result->csp_handle_,
22 CSSM_ALGID_SHA1WithRSA,
23 NULL,
24 key->key(),
25 &result->sig_handle_);
26 if (crtn) {
27 NOTREACHED();
28 return NULL;
29 }
30
31 crtn = CSSM_SignDataInit(result->sig_handle_);
32 if (crtn) {
33 NOTREACHED();
34 return false;
35 }
36
37 return result.release();
38 }
39
40 SignatureCreator::SignatureCreator() : csp_handle_(0), sig_handle_(0) {
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 }
50
51 SignatureCreator::~SignatureCreator() {
52 CSSM_RETURN crtn;
53 if (sig_handle_) {
54 crtn = CSSM_DeleteContext(sig_handle_);
55 DCHECK(crtn == CSSM_OK);
56 }
57
58 if (csp_handle_) {
59 CSSM_RETURN crtn = CSSM_ModuleDetach(csp_handle_);
60 DCHECK(crtn == CSSM_OK);
61 }
62 }
63
64 bool SignatureCreator::Update(const uint8* data_part, int data_part_len) {
65 CSSM_DATA data;
66 data.Data = const_cast<uint8*>(data_part);
67 data.Length = data_part_len;
68 CSSM_RETURN crtn = CSSM_SignDataUpdate(sig_handle_, &data, 1);
69 DCHECK(crtn == CSSM_OK);
70 return true;
71 }
72
73 bool SignatureCreator::Final(std::vector<uint8>* signature) {
74 CSSM_DATA sig;
75 memset(&sig, 0, sizeof(CSSM_DATA)); // Allow CSSM allocate memory;
76 CSSM_RETURN crtn = CSSM_SignDataFinal(sig_handle_, &sig);
77
78 if (crtn) {
79 NOTREACHED();
80 return false;
81 }
82
83 signature->assign(sig.Data, sig.Data + sig.Length);
84 kCssmMemoryFunctions.free_func(sig.Data, NULL); // Release data alloc'd
85 // by CSSM
86
87 return true;
88 }
89
90 } // namespace base
OLDNEW
« no previous file with comments | « base/crypto/signature_creator.h ('k') | base/crypto/signature_verifier_mac.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698