1 // Copyright (c) 2011 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.
5 #include "crypto/signature_creator.h"
9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "crypto/cssm_init.h"
16 SignatureCreator
* SignatureCreator::Create(RSAPrivateKey
* key
) {
17 scoped_ptr
<SignatureCreator
> result(new SignatureCreator
);
21 crtn
= CSSM_CSP_CreateSignatureContext(GetSharedCSPHandle(),
22 CSSM_ALGID_SHA1WithRSA
,
25 &result
->sig_handle_
);
31 crtn
= CSSM_SignDataInit(result
->sig_handle_
);
37 return result
.release();
40 SignatureCreator::SignatureCreator() : key_(NULL
), sig_handle_(0) {
44 SignatureCreator::~SignatureCreator() {
47 crtn
= CSSM_DeleteContext(sig_handle_
);
48 DCHECK_EQ(CSSM_OK
, crtn
);
52 bool SignatureCreator::Update(const uint8
* data_part
, int data_part_len
) {
54 data
.Data
= const_cast<uint8
*>(data_part
);
55 data
.Length
= data_part_len
;
56 CSSM_RETURN crtn
= CSSM_SignDataUpdate(sig_handle_
, &data
, 1);
57 DCHECK_EQ(CSSM_OK
, crtn
);
61 bool SignatureCreator::Final(std::vector
<uint8
>* signature
) {
63 CSSM_RETURN crtn
= CSSM_SignDataFinal(sig_handle_
, sig
);
70 signature
->assign(sig
->Data
, sig
->Data
+ sig
->Length
);