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 default values first. |
| 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 |