OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 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 "net/base/x509_certificate.h" | 5 #include "net/base/x509_certificate.h" |
6 | 6 |
7 #include <CommonCrypto/CommonDigest.h> | 7 #include <CommonCrypto/CommonDigest.h> |
8 #include <CoreServices/CoreServices.h> | 8 #include <CoreServices/CoreServices.h> |
9 #include <Security/Security.h> | 9 #include <Security/Security.h> |
10 #include <time.h> | 10 #include <time.h> |
(...skipping 794 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
805 sint32 estTime; | 805 sint32 estTime; |
806 CSSM_RETURN crtn = CSSM_TP_SubmitCredRequest(tp_handle, NULL, | 806 CSSM_RETURN crtn = CSSM_TP_SubmitCredRequest(tp_handle, NULL, |
807 CSSM_TP_AUTHORITY_REQUEST_CERTISSUE, &reqSet, &callerAuthContext, | 807 CSSM_TP_AUTHORITY_REQUEST_CERTISSUE, &reqSet, &callerAuthContext, |
808 &estTime, &refId); | 808 &estTime, &refId); |
809 if (crtn) { | 809 if (crtn) { |
810 DLOG(ERROR) << "CSSM_TP_SubmitCredRequest failed " << crtn; | 810 DLOG(ERROR) << "CSSM_TP_SubmitCredRequest failed " << crtn; |
811 return NULL; | 811 return NULL; |
812 } | 812 } |
813 | 813 |
814 CSSM_BOOL confirmRequired; | 814 CSSM_BOOL confirmRequired; |
815 CSSM_TP_RESULT_SET *resultSet = NULL; | 815 CSSM_TP_RESULT_SET* resultSet = NULL; |
816 crtn = CSSM_TP_RetrieveCredResult(tp_handle, &refId, NULL, &estTime, | 816 crtn = CSSM_TP_RetrieveCredResult(tp_handle, &refId, NULL, &estTime, |
817 &confirmRequired, &resultSet); | 817 &confirmRequired, &resultSet); |
818 ScopedEncodedCertResults scopedResults(resultSet); | 818 ScopedEncodedCertResults scopedResults(resultSet); |
819 crypto::CSSMFree(refId.Data); | 819 crypto::CSSMFree(refId.Data); |
820 if (crtn) { | 820 if (crtn) { |
821 DLOG(ERROR) << "CSSM_TP_RetrieveCredResult failed " << crtn; | 821 DLOG(ERROR) << "CSSM_TP_RetrieveCredResult failed " << crtn; |
822 return NULL; | 822 return NULL; |
823 } | 823 } |
824 | 824 |
825 if (confirmRequired) { | 825 if (confirmRequired) { |
(...skipping 681 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1507 Pickle* pickle) { | 1507 Pickle* pickle) { |
1508 CSSM_DATA cert_data; | 1508 CSSM_DATA cert_data; |
1509 OSStatus status = SecCertificateGetData(cert_handle, &cert_data); | 1509 OSStatus status = SecCertificateGetData(cert_handle, &cert_data); |
1510 if (status) | 1510 if (status) |
1511 return false; | 1511 return false; |
1512 | 1512 |
1513 return pickle->WriteData(reinterpret_cast<char*>(cert_data.Data), | 1513 return pickle->WriteData(reinterpret_cast<char*>(cert_data.Data), |
1514 cert_data.Length); | 1514 cert_data.Length); |
1515 } | 1515 } |
1516 | 1516 |
1517 // static | |
1518 void X509Certificate::GetPublicKeyInfo(OSCertHandle cert_handle, | |
1519 size_t* size_bits, | |
1520 PublicKeyType* type) { | |
1521 // Since we might fail, set the output parameters to known values first. | |
wtc
2011/12/14 00:18:03
Nit: known => default?
"known values" is a little
| |
1522 *type = kPublicKeyTypeUnknown; | |
1523 *size_bits = 0; | |
1524 | |
1525 SecKeyRef key; | |
1526 OSStatus status = SecCertificateCopyPublicKey(cert_handle, &key); | |
1527 if (status) { | |
1528 NOTREACHED() << "SecCertificateCopyPublicKey failed: " << status; | |
1529 return; | |
1530 } | |
1531 ScopedCFTypeRef<SecKeyRef> scoped_key; | |
1532 | |
1533 const CSSM_KEY* cssm_key; | |
1534 status = SecKeyGetCSSMKey(key, &cssm_key); | |
1535 if (status) { | |
1536 NOTREACHED() << "SecKeyGetCSSMKey failed: " << status; | |
1537 return; | |
1538 } | |
1539 | |
1540 *size_bits = cssm_key->KeyHeader.LogicalKeySizeInBits; | |
1541 | |
1542 switch (cssm_key->KeyHeader.AlgorithmId) { | |
1543 case CSSM_ALGID_RSA: | |
1544 *type = kPublicKeyTypeRSA; | |
1545 break; | |
1546 case CSSM_ALGID_DSA: | |
1547 *type = kPublicKeyTypeDSA; | |
1548 break; | |
1549 case CSSM_ALGID_ECDSA: | |
1550 *type = kPublicKeyTypeECDSA; | |
1551 break; | |
1552 case CSSM_ALGID_DH: | |
1553 *type = kPublicKeyTypeDH; | |
1554 break; | |
1555 default: | |
1556 *type = kPublicKeyTypeUnknown; | |
1557 *size_bits = 0; | |
1558 break; | |
1559 } | |
1560 } | |
1561 | |
1517 } // namespace net | 1562 } // namespace net |
OLD | NEW |