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

Side by Side Diff: crypto/signature_creator_openssl.cc

Issue 1909513003: Rename crypto/ *_openssl files (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 | « crypto/signature_creator.cc ('k') | crypto/signature_verifier.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) 2012 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 "crypto/signature_creator.h"
6
7 #include <openssl/evp.h>
8 #include <openssl/rsa.h>
9 #include <stddef.h>
10 #include <stdint.h>
11
12 #include <memory>
13
14 #include "base/logging.h"
15 #include "crypto/openssl_util.h"
16 #include "crypto/rsa_private_key.h"
17 #include "crypto/scoped_openssl_types.h"
18
19 namespace crypto {
20
21 namespace {
22
23 const EVP_MD* ToOpenSSLDigest(SignatureCreator::HashAlgorithm hash_alg) {
24 switch (hash_alg) {
25 case SignatureCreator::SHA1:
26 return EVP_sha1();
27 case SignatureCreator::SHA256:
28 return EVP_sha256();
29 }
30 return NULL;
31 }
32
33 int ToOpenSSLDigestType(SignatureCreator::HashAlgorithm hash_alg) {
34 switch (hash_alg) {
35 case SignatureCreator::SHA1:
36 return NID_sha1;
37 case SignatureCreator::SHA256:
38 return NID_sha256;
39 }
40 return NID_undef;
41 }
42
43 } // namespace
44
45 // static
46 SignatureCreator* SignatureCreator::Create(RSAPrivateKey* key,
47 HashAlgorithm hash_alg) {
48 OpenSSLErrStackTracer err_tracer(FROM_HERE);
49 std::unique_ptr<SignatureCreator> result(new SignatureCreator);
50 const EVP_MD* const digest = ToOpenSSLDigest(hash_alg);
51 DCHECK(digest);
52 if (!digest) {
53 return NULL;
54 }
55 if (!EVP_DigestSignInit(result->sign_context_, NULL, digest, NULL,
56 key->key())) {
57 return NULL;
58 }
59 return result.release();
60 }
61
62 // static
63 bool SignatureCreator::Sign(RSAPrivateKey* key,
64 HashAlgorithm hash_alg,
65 const uint8_t* data,
66 int data_len,
67 std::vector<uint8_t>* signature) {
68 ScopedRSA rsa_key(EVP_PKEY_get1_RSA(key->key()));
69 if (!rsa_key)
70 return false;
71 signature->resize(RSA_size(rsa_key.get()));
72
73 unsigned int len = 0;
74 if (!RSA_sign(ToOpenSSLDigestType(hash_alg), data, data_len,
75 signature->data(), &len, rsa_key.get())) {
76 signature->clear();
77 return false;
78 }
79 signature->resize(len);
80 return true;
81 }
82
83 SignatureCreator::SignatureCreator()
84 : sign_context_(EVP_MD_CTX_create()) {
85 }
86
87 SignatureCreator::~SignatureCreator() {
88 EVP_MD_CTX_destroy(sign_context_);
89 }
90
91 bool SignatureCreator::Update(const uint8_t* data_part, int data_part_len) {
92 OpenSSLErrStackTracer err_tracer(FROM_HERE);
93 return !!EVP_DigestSignUpdate(sign_context_, data_part, data_part_len);
94 }
95
96 bool SignatureCreator::Final(std::vector<uint8_t>* signature) {
97 OpenSSLErrStackTracer err_tracer(FROM_HERE);
98
99 // Determine the maximum length of the signature.
100 size_t len = 0;
101 if (!EVP_DigestSignFinal(sign_context_, NULL, &len)) {
102 signature->clear();
103 return false;
104 }
105 signature->resize(len);
106
107 // Sign it.
108 if (!EVP_DigestSignFinal(sign_context_, signature->data(), &len)) {
109 signature->clear();
110 return false;
111 }
112 signature->resize(len);
113 return true;
114 }
115
116 } // namespace crypto
OLDNEW
« no previous file with comments | « crypto/signature_creator.cc ('k') | crypto/signature_verifier.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698