Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | |
|
Ryan Sleevi
2013/08/06 19:50:38
Rather than define an NSS-only unittest, just call
juanlang
2013/08/06 21:32:59
Done.
| |
| 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 "net/cert/jwk_serializer.h" | |
| 6 | |
| 7 #include "base/base64.h" | |
| 8 #include "base/values.h" | |
| 9 #include "testing/gtest/include/gtest/gtest.h" | |
| 10 | |
| 11 namespace net { | |
| 12 | |
| 13 static const unsigned char kP256SpkiPrefix[] = { | |
|
Ryan Sleevi
2013/08/06 19:50:38
nit: Comment explaining what this prefix is (I can
juanlang
2013/08/06 21:32:59
Done.
| |
| 14 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, | |
| 15 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, | |
| 16 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, | |
| 17 0x42, 0x00, 0x04 | |
| 18 }; | |
| 19 static const unsigned int kEcPointSize = 32U; | |
| 20 | |
| 21 static const unsigned char kSpkiEc[] = { | |
|
Ryan Sleevi
2013/08/06 19:50:38
nit: comments
juanlang
2013/08/06 21:32:59
Done.
| |
| 22 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, | |
| 23 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, | |
| 24 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, | |
| 25 0x42, 0x00, 0x04, | |
| 26 0x29, 0x5d, 0x6e, 0xfe, 0x33, 0x77, 0x26, 0xea, | |
| 27 0x5b, 0xa4, 0xe6, 0x1b, 0x34, 0x6e, 0x7b, 0xa0, | |
| 28 0xa3, 0x8f, 0x33, 0x49, 0xa0, 0x9c, 0xae, 0x98, | |
| 29 0xbd, 0x46, 0x0d, 0xf6, 0xd4, 0x5a, 0xdc, 0x8a, | |
| 30 0x1f, 0x8a, 0xb2, 0x20, 0x51, 0xb7, 0xd2, 0x87, | |
| 31 0x0d, 0x53, 0x7e, 0x5d, 0x94, 0xa3, 0xe0, 0x34, | |
| 32 0x16, 0xa1, 0xcc, 0x10, 0x48, 0xcd, 0x70, 0x9c, | |
| 33 0x05, 0xd3, 0xd2, 0xca, 0xdf, 0x44, 0x2f, 0xf4 | |
| 34 }; | |
| 35 | |
| 36 static const unsigned char kSpkiEcWithZeroXY[] = { | |
|
Ryan Sleevi
2013/08/06 19:50:38
nit: comments
juanlang
2013/08/06 21:32:59
Done.
| |
| 37 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, | |
| 38 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, | |
| 39 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, | |
| 40 0x42, 0x00, 0x04, | |
| 41 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 42 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 43 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 44 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 45 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 46 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 47 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 48 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 | |
| 49 }; | |
| 50 | |
| 51 TEST(JwkSerializerNSSTest, ConvertSPKIFromDERToJwkEC) { | |
| 52 base::StringPiece spki; | |
| 53 base::DictionaryValue public_key_jwk; | |
| 54 | |
| 55 EXPECT_FALSE(JwkSerializer::ConvertSPKIFromDERToJWK(spki, &public_key_jwk)); | |
| 56 EXPECT_TRUE(public_key_jwk.empty()); | |
| 57 | |
| 58 // Test the result of a "normal" point on this curve. | |
| 59 spki.set(reinterpret_cast<const char*>(kSpkiEc), sizeof(kSpkiEc)); | |
| 60 EXPECT_TRUE(JwkSerializer::ConvertSPKIFromDERToJWK(spki, &public_key_jwk)); | |
| 61 | |
| 62 std::string string_value; | |
| 63 EXPECT_TRUE(public_key_jwk.GetString("alg", &string_value)); | |
| 64 EXPECT_STREQ("EC", string_value.c_str()); | |
| 65 EXPECT_TRUE(public_key_jwk.GetString("crv", &string_value)); | |
| 66 EXPECT_STREQ("P-256", string_value.c_str()); | |
| 67 | |
| 68 EXPECT_TRUE(public_key_jwk.GetString("x", &string_value)); | |
| 69 std::string decoded_coordinate; | |
| 70 EXPECT_TRUE(base::Base64Decode(string_value, &decoded_coordinate)); | |
| 71 EXPECT_EQ(kEcPointSize, decoded_coordinate.size()); | |
| 72 EXPECT_EQ(0, | |
| 73 memcmp(decoded_coordinate.data(), | |
| 74 kSpkiEc + sizeof(kP256SpkiPrefix), | |
| 75 kEcPointSize)); | |
| 76 | |
| 77 EXPECT_TRUE(public_key_jwk.GetString("y", &string_value)); | |
| 78 EXPECT_TRUE(base::Base64Decode(string_value, &decoded_coordinate)); | |
| 79 EXPECT_EQ(kEcPointSize, decoded_coordinate.size()); | |
| 80 EXPECT_EQ(0, | |
| 81 memcmp(decoded_coordinate.data(), | |
| 82 kSpkiEc + sizeof(kP256SpkiPrefix) + kEcPointSize, | |
| 83 kEcPointSize)); | |
| 84 | |
| 85 // Test the result of a corner case: leading 0s in the x, y coordinates are | |
| 86 // not trimmed, but the point is fixed-length encoded. | |
| 87 spki.set(reinterpret_cast<const char*>(kSpkiEcWithZeroXY), | |
| 88 sizeof(kSpkiEcWithZeroXY)); | |
| 89 EXPECT_TRUE(JwkSerializer::ConvertSPKIFromDERToJWK(spki, &public_key_jwk)); | |
| 90 | |
| 91 EXPECT_TRUE(public_key_jwk.GetString("alg", &string_value)); | |
| 92 EXPECT_STREQ("EC", string_value.c_str()); | |
| 93 EXPECT_TRUE(public_key_jwk.GetString("crv", &string_value)); | |
| 94 EXPECT_STREQ("P-256", string_value.c_str()); | |
| 95 | |
| 96 EXPECT_TRUE(public_key_jwk.GetString("x", &string_value)); | |
| 97 EXPECT_TRUE(base::Base64Decode(string_value, &decoded_coordinate)); | |
| 98 EXPECT_EQ(kEcPointSize, decoded_coordinate.size()); | |
| 99 EXPECT_EQ(0, | |
| 100 memcmp(decoded_coordinate.data(), | |
| 101 kSpkiEcWithZeroXY + sizeof(kP256SpkiPrefix), | |
| 102 kEcPointSize)); | |
| 103 | |
| 104 EXPECT_TRUE(public_key_jwk.GetString("y", &string_value)); | |
| 105 EXPECT_TRUE(base::Base64Decode(string_value, &decoded_coordinate)); | |
| 106 EXPECT_EQ(kEcPointSize, decoded_coordinate.size()); | |
| 107 EXPECT_EQ(0, | |
| 108 memcmp(decoded_coordinate.data(), | |
| 109 kSpkiEcWithZeroXY + sizeof(kP256SpkiPrefix) + kEcPointSize, | |
| 110 kEcPointSize)); | |
| 111 } | |
| 112 | |
| 113 } // namespace net | |
| OLD | NEW |