123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- // Copyright (c) 2010 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "net/cert/pem.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace net {
- TEST(PEMTokenizerTest, BasicParsing) {
- const char data[] =
- "-----BEGIN EXPECTED-BLOCK-----\n"
- "TWF0Y2hlc0FjY2VwdGVkQmxvY2tUeXBl\n"
- "-----END EXPECTED-BLOCK-----\n";
- base::StringPiece string_piece(data);
- std::vector<std::string> accepted_types;
- accepted_types.push_back("EXPECTED-BLOCK");
- PEMTokenizer tokenizer(string_piece, accepted_types);
- EXPECT_TRUE(tokenizer.GetNext());
- EXPECT_EQ("EXPECTED-BLOCK", tokenizer.block_type());
- EXPECT_EQ("MatchesAcceptedBlockType", tokenizer.data());
- EXPECT_FALSE(tokenizer.GetNext());
- }
- TEST(PEMTokenizerTest, CarriageReturnLineFeeds) {
- const char data[] =
- "-----BEGIN EXPECTED-BLOCK-----\r\n"
- "TWF0Y2hlc0FjY2VwdGVkQmxvY2tUeXBl\r\n"
- "-----END EXPECTED-BLOCK-----\r\n";
- base::StringPiece string_piece(data);
- std::vector<std::string> accepted_types;
- accepted_types.push_back("EXPECTED-BLOCK");
- PEMTokenizer tokenizer(string_piece, accepted_types);
- EXPECT_TRUE(tokenizer.GetNext());
- EXPECT_EQ("EXPECTED-BLOCK", tokenizer.block_type());
- EXPECT_EQ("MatchesAcceptedBlockType", tokenizer.data());
- EXPECT_FALSE(tokenizer.GetNext());
- }
- TEST(PEMTokenizerTest, NoAcceptedBlockTypes) {
- const char data[] =
- "-----BEGIN UNEXPECTED-BLOCK-----\n"
- "SWdub3Jlc1JlamVjdGVkQmxvY2tUeXBl\n"
- "-----END UNEXPECTED-BLOCK-----\n";
- base::StringPiece string_piece(data);
- std::vector<std::string> accepted_types;
- accepted_types.push_back("EXPECTED-BLOCK");
- PEMTokenizer tokenizer(string_piece, accepted_types);
- EXPECT_FALSE(tokenizer.GetNext());
- }
- TEST(PEMTokenizerTest, MultipleAcceptedBlockTypes) {
- const char data[] =
- "-----BEGIN BLOCK-ONE-----\n"
- "RW5jb2RlZERhdGFPbmU=\n"
- "-----END BLOCK-ONE-----\n"
- "-----BEGIN BLOCK-TWO-----\n"
- "RW5jb2RlZERhdGFUd28=\n"
- "-----END BLOCK-TWO-----\n";
- base::StringPiece string_piece(data);
- std::vector<std::string> accepted_types;
- accepted_types.push_back("BLOCK-ONE");
- accepted_types.push_back("BLOCK-TWO");
- PEMTokenizer tokenizer(string_piece, accepted_types);
- EXPECT_TRUE(tokenizer.GetNext());
- EXPECT_EQ("BLOCK-ONE", tokenizer.block_type());
- EXPECT_EQ("EncodedDataOne", tokenizer.data());
- EXPECT_TRUE(tokenizer.GetNext());
- EXPECT_EQ("BLOCK-TWO", tokenizer.block_type());
- EXPECT_EQ("EncodedDataTwo", tokenizer.data());
- EXPECT_FALSE(tokenizer.GetNext());
- }
- TEST(PEMTokenizerTest, MissingFooter) {
- const char data[] =
- "-----BEGIN MISSING-FOOTER-----\n"
- "RW5jb2RlZERhdGFPbmU=\n"
- "-----END MISSING-FOOTER-----\n"
- "-----BEGIN MISSING-FOOTER-----\n"
- "RW5jb2RlZERhdGFUd28=\n";
- base::StringPiece string_piece(data);
- std::vector<std::string> accepted_types;
- accepted_types.push_back("MISSING-FOOTER");
- PEMTokenizer tokenizer(string_piece, accepted_types);
- EXPECT_TRUE(tokenizer.GetNext());
- EXPECT_EQ("MISSING-FOOTER", tokenizer.block_type());
- EXPECT_EQ("EncodedDataOne", tokenizer.data());
- EXPECT_FALSE(tokenizer.GetNext());
- }
- TEST(PEMTokenizerTest, NestedEncoding) {
- const char data[] =
- "-----BEGIN BLOCK-ONE-----\n"
- "RW5jb2RlZERhdGFPbmU=\n"
- "-----BEGIN BLOCK-TWO-----\n"
- "RW5jb2RlZERhdGFUd28=\n"
- "-----END BLOCK-TWO-----\n"
- "-----END BLOCK-ONE-----\n"
- "-----BEGIN BLOCK-ONE-----\n"
- "RW5jb2RlZERhdGFUaHJlZQ==\n"
- "-----END BLOCK-ONE-----\n";
- base::StringPiece string_piece(data);
- std::vector<std::string> accepted_types;
- accepted_types.push_back("BLOCK-ONE");
- PEMTokenizer tokenizer(string_piece, accepted_types);
- EXPECT_TRUE(tokenizer.GetNext());
- EXPECT_EQ("BLOCK-ONE", tokenizer.block_type());
- EXPECT_EQ("EncodedDataThree", tokenizer.data());
- EXPECT_FALSE(tokenizer.GetNext());
- }
- TEST(PEMTokenizerTest, EmptyAcceptedTypes) {
- const char data[] =
- "-----BEGIN BLOCK-ONE-----\n"
- "RW5jb2RlZERhdGFPbmU=\n"
- "-----END BLOCK-ONE-----\n";
- base::StringPiece string_piece(data);
- std::vector<std::string> accepted_types;
- PEMTokenizer tokenizer(string_piece, accepted_types);
- EXPECT_FALSE(tokenizer.GetNext());
- }
- TEST(PEMTokenizerTest, BlockWithHeader) {
- const char data[] =
- "-----BEGIN BLOCK-ONE-----\n"
- "Header-One: Data data data\n"
- "Header-Two: \n"
- " continuation\n"
- "Header-Three: Mix-And,Match\n"
- "\n"
- "RW5jb2RlZERhdGFPbmU=\n"
- "-----END BLOCK-ONE-----\n"
- "-----BEGIN BLOCK-ONE-----\n"
- "RW5jb2RlZERhdGFUd28=\n"
- "-----END BLOCK-ONE-----\n";
- base::StringPiece string_piece(data);
- std::vector<std::string> accepted_types;
- accepted_types.push_back("BLOCK-ONE");
- PEMTokenizer tokenizer(string_piece, accepted_types);
- EXPECT_TRUE(tokenizer.GetNext());
- EXPECT_EQ("BLOCK-ONE", tokenizer.block_type());
- EXPECT_EQ("EncodedDataTwo", tokenizer.data());
- EXPECT_FALSE(tokenizer.GetNext());
- }
- TEST(PEMEncodeTest, Basic) {
- EXPECT_EQ(
- "-----BEGIN BLOCK-ONE-----\n"
- "RW5jb2RlZERhdGFPbmU=\n"
- "-----END BLOCK-ONE-----\n",
- PEMEncode("EncodedDataOne", "BLOCK-ONE"));
- EXPECT_EQ(
- "-----BEGIN BLOCK-TWO-----\n"
- "RW5jb2RlZERhdGFUd28=\n"
- "-----END BLOCK-TWO-----\n",
- PEMEncode("EncodedDataTwo", "BLOCK-TWO"));
- }
- TEST(PEMEncodeTest, Empty) {
- EXPECT_EQ(
- "-----BEGIN EMPTY-----\n"
- "-----END EMPTY-----\n",
- PEMEncode("", "EMPTY"));
- }
- TEST(PEMEncodeTest, Wrapping) {
- EXPECT_EQ(
- "-----BEGIN SINGLE LINE-----\n"
- "MTIzNDU2Nzg5MGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktM\n"
- "-----END SINGLE LINE-----\n",
- PEMEncode("1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL",
- "SINGLE LINE"));
- EXPECT_EQ(
- "-----BEGIN WRAPPED LINE-----\n"
- "MTIzNDU2Nzg5MGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktM\nTQ==\n"
- "-----END WRAPPED LINE-----\n",
- PEMEncode("1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLM",
- "WRAPPED LINE"));
- }
- } // namespace net
|