libweave: Add p224_spake to build
libweave.gyp builds ibweave/external/crypto/.
All added code wrapped into weave namespace.
BUG=brillo:1270
TEST=`FEATURES=test emerge-gizmo libweave buffet`
Change-Id: I8f507e72c0a2ad61309b9d503f709bf770326f9d
Reviewed-on: https://chromium-review.googlesource.com/291429
Commit-Ready: Vitaly Buka <vitalybuka@chromium.org>
Tested-by: Vitaly Buka <vitalybuka@chromium.org>
Reviewed-by: Vitaly Buka <vitalybuka@chromium.org>
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
diff --git a/libweave/external/crypto/p224.cc b/libweave/external/crypto/p224.cc
index 11946a9..b7c66c5 100644
--- a/libweave/external/crypto/p224.cc
+++ b/libweave/external/crypto/p224.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -7,11 +7,15 @@
//
// See http://www.imperialviolet.org/2010/12/04/ecc.html ([1]) for background.
-#include "crypto/p224.h"
+#include "libweave/external/crypto/p224.h"
#include <string.h>
-#include "base/sys_byteorder.h"
+#include <base/sys_byteorder.h>
+
+namespace weave {
+namespace crypto {
+namespace p224 {
namespace {
@@ -30,8 +34,6 @@
// than we would really like. But it has the useful feature that we hit 2**224
// exactly, making the reflections during a reduce much nicer.
-using crypto::p224::FieldElement;
-
// kP is the P224 prime.
const FieldElement kP = {
1, 0, 0, 268431360,
@@ -81,9 +83,9 @@
}
}
-static const uint32 kTwo31p3 = (1u<<31) + (1u<<3);
-static const uint32 kTwo31m3 = (1u<<31) - (1u<<3);
-static const uint32 kTwo31m15m3 = (1u<<31) - (1u<<15) - (1u<<3);
+static const uint32 kTwo31p3 = (1u << 31) + (1u << 3);
+static const uint32 kTwo31m3 = (1u << 31) - (1u << 3);
+static const uint32 kTwo31m15m3 = (1u << 31) - (1u << 15) - (1u << 3);
// kZero31ModP is 0 mod p where bit 31 is set in all limbs so that we can
// subtract smaller amounts without underflow. See the section "Subtraction" in
// [1] for why.
@@ -428,8 +430,6 @@
// These functions deal with group elements. The group is an elliptic curve
// group with a = -3 defined in FIPS 186-3, section D.2.2.
-using crypto::p224::Point;
-
// kB is parameter of the elliptic curve.
const FieldElement kB = {
55967668, 11768882, 265861671, 185302395,
@@ -655,10 +655,6 @@
} // anonymous namespace
-namespace crypto {
-
-namespace p224 {
-
bool Point::SetFromString(const base::StringPiece& in) {
if (in.size() != 2*28)
return false;
@@ -685,7 +681,7 @@
Subtract(&rhs, rhs, three_x);
Reduce(&rhs);
- ::Add(&rhs, rhs, kB);
+ Add(&rhs, rhs, kB);
Contract(&rhs);
return memcmp(&lhs, &rhs, sizeof(lhs)) == 0;
}
@@ -715,20 +711,20 @@
}
void ScalarMult(const Point& in, const uint8* scalar, Point* out) {
- ::ScalarMult(out, in, scalar, 28);
+ ScalarMult(out, in, scalar, 28);
}
// kBasePoint is the base point (generator) of the elliptic curve group.
static const Point kBasePoint = {
{22813985, 52956513, 34677300, 203240812,
- 12143107, 133374265, 225162431, 191946955},
+ 12143107, 133374265, 225162431, 191946955},
{83918388, 223877528, 122119236, 123340192,
- 266784067, 263504429, 146143011, 198407736},
+ 266784067, 263504429, 146143011, 198407736},
{1, 0, 0, 0, 0, 0, 0, 0},
};
void ScalarBaseMult(const uint8* scalar, Point* out) {
- ::ScalarMult(out, kBasePoint, scalar, 28);
+ ScalarMult(out, kBasePoint, scalar, 28);
}
void Add(const Point& a, const Point& b, Point* out) {
@@ -754,5 +750,5 @@
}
} // namespace p224
-
} // namespace crypto
+} // namespace weave
diff --git a/libweave/external/crypto/p224.h b/libweave/external/crypto/p224.h
index 2efecfa..a835ecd 100644
--- a/libweave/external/crypto/p224.h
+++ b/libweave/external/crypto/p224.h
@@ -1,16 +1,16 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CRYPTO_P224_H_
-#define CRYPTO_P224_H_
+#ifndef LIBWEAVE_EXTERNAL_CRYPTO_P224_H_
+#define LIBWEAVE_EXTERNAL_CRYPTO_P224_H_
#include <string>
-#include "base/basictypes.h"
-#include "base/strings/string_piece.h"
-#include "crypto/crypto_export.h"
+#include <base/basictypes.h>
+#include <base/strings/string_piece.h>
+namespace weave {
namespace crypto {
// P224 implements an elliptic curve group, commonly known as P224 and defined
@@ -21,7 +21,7 @@
// little endian order.
typedef uint32 FieldElement[8];
-struct CRYPTO_EXPORT Point {
+struct Point {
// SetFromString the value of the point from the 56 byte, external
// representation. The external point representation is an (x, y) pair of a
// point on the curve. Each field element is represented as a big-endian
@@ -41,20 +41,20 @@
// ScalarMult computes *out = in*scalar where scalar is a 28-byte, big-endian
// number.
-void CRYPTO_EXPORT ScalarMult(const Point& in, const uint8* scalar, Point* out);
+void ScalarMult(const Point& in, const uint8* scalar, Point* out);
// ScalarBaseMult computes *out = g*scalar where g is the base point of the
// curve and scalar is a 28-byte, big-endian number.
-void CRYPTO_EXPORT ScalarBaseMult(const uint8* scalar, Point* out);
+void ScalarBaseMult(const uint8* scalar, Point* out);
// Add computes *out = a+b.
-void CRYPTO_EXPORT Add(const Point& a, const Point& b, Point* out);
+void Add(const Point& a, const Point& b, Point* out);
// Negate calculates out = -a;
-void CRYPTO_EXPORT Negate(const Point& a, Point* out);
+void Negate(const Point& a, Point* out);
} // namespace p224
-
} // namespace crypto
+} // namespace weave
-#endif // CRYPTO_P224_H_
+#endif // LIBWEAVE_EXTERNAL_CRYPTO_P224_H_
diff --git a/libweave/external/crypto/p224_spake.cc b/libweave/external/crypto/p224_spake.cc
index a6dec40..634c7e6 100644
--- a/libweave/external/crypto/p224_spake.cc
+++ b/libweave/external/crypto/p224_spake.cc
@@ -1,18 +1,21 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This code implements SPAKE2, a variant of EKE:
// http://www.di.ens.fr/~pointche/pub.php?reference=AbPo04
-#include <crypto/p224_spake.h>
+#include "libweave/external/crypto/p224_spake.h"
#include <algorithm>
#include <base/logging.h>
-#include <crypto/p224.h>
-#include <crypto/random.h>
-#include <crypto/secure_util.h>
+#include <base/rand_util.h>
+
+#include "libweave/external/crypto/p224.h"
+
+namespace weave {
+namespace crypto {
namespace {
@@ -77,26 +80,41 @@
// return 0;
// }
-const crypto::p224::Point kM = {
+const p224::Point kM = {
{174237515, 77186811, 235213682, 33849492,
- 33188520, 48266885, 177021753, 81038478},
+ 33188520, 48266885, 177021753, 81038478},
{104523827, 245682244, 266509668, 236196369,
- 28372046, 145351378, 198520366, 113345994},
+ 28372046, 145351378, 198520366, 113345994},
{1, 0, 0, 0, 0, 0, 0, 0},
};
-const crypto::p224::Point kN = {
+const p224::Point kN = {
{136176322, 263523628, 251628795, 229292285,
- 5034302, 185981975, 171998428, 11653062},
+ 5034302, 185981975, 171998428, 11653062},
{197567436, 51226044, 60372156, 175772188,
- 42075930, 8083165, 160827401, 65097570},
+ 42075930, 8083165, 160827401, 65097570},
{1, 0, 0, 0, 0, 0, 0, 0},
};
+// Performs a constant-time comparison of two strings, returning true if the
+// strings are equal.
+//
+// For cryptographic operations, comparison functions such as memcmp() may
+// expose side-channel information about input, allowing an attacker to
+// perform timing analysis to determine what the expected bits should be. In
+// order to avoid such attacks, the comparison must execute in constant time,
+// so as to not to reveal to the attacker where the difference(s) are.
+// For an example attack, see
+// http://groups.google.com/group/keyczar-discuss/browse_thread/thread/5571eca0948b2a13
+bool SecureMemEqual(const uint8_t* s1_ptr, const uint8_t* s2_ptr, size_t n) {
+ uint8_t tmp = 0;
+ for (size_t i = 0; i < n; ++i, ++s1_ptr, ++s2_ptr)
+ tmp |= *s1_ptr ^ *s2_ptr;
+ return (tmp == 0);
+}
+
} // anonymous namespace
-namespace crypto {
-
P224EncryptedKeyExchange::P224EncryptedKeyExchange(
PeerType peer_type, const base::StringPiece& password)
: state_(kStateInitial),
@@ -105,7 +123,7 @@
memset(&expected_authenticator_, 0, sizeof(expected_authenticator_));
// x_ is a random scalar.
- RandBytes(x_, sizeof(x_));
+ base::RandBytes(x_, sizeof(x_));
// Calculate |password| hash to get SPAKE password value.
SHA256HashString(std::string(password.data(), password.length()),
@@ -155,8 +173,8 @@
error_ = "peer's hash had an incorrect size";
return kResultFailed;
}
- if (!SecureMemEqual(message.data(), expected_authenticator_,
- message.size())) {
+ if (!SecureMemEqual(reinterpret_cast<const uint8_t*>(message.data()),
+ expected_authenticator_, message.size())) {
error_ = "peer's hash had incorrect value";
return kResultFailed;
}
@@ -266,3 +284,4 @@
}
} // namespace crypto
+} // namespace weave
diff --git a/libweave/external/crypto/p224_spake.h b/libweave/external/crypto/p224_spake.h
index 556b15c..aea280d 100644
--- a/libweave/external/crypto/p224_spake.h
+++ b/libweave/external/crypto/p224_spake.h
@@ -1,15 +1,19 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CRYPTO_P224_SPAKE_H_
-#define CRYPTO_P224_SPAKE_H_
+#ifndef LIBWEAVE_EXTERNAL_CRYPTO_P224_SPAKE_H_
+#define LIBWEAVE_EXTERNAL_CRYPTO_P224_SPAKE_H_
+
+#include <string>
#include <base/gtest_prod_util.h>
#include <base/strings/string_piece.h>
-#include <crypto/p224.h>
-#include <crypto/sha2.h>
+#include "libweave/external/crypto/p224.h"
+#include "libweave/external/crypto/sha2.h"
+
+namespace weave {
namespace crypto {
// P224EncryptedKeyExchange implements SPAKE2, a variant of Encrypted
@@ -32,7 +36,7 @@
// kResultSuccess: The authentication was successful.
//
// In each exchange, each peer always sends a message.
-class CRYPTO_EXPORT P224EncryptedKeyExchange {
+class P224EncryptedKeyExchange {
public:
enum Result {
kResultPending,
@@ -122,5 +126,6 @@
};
} // namespace crypto
+} // namespace weave
-#endif // CRYPTO_P224_SPAKE_H_
+#endif // LIBWEAVE_EXTERNAL_CRYPTO_P224_SPAKE_H_
diff --git a/libweave/external/crypto/p224_spake_unittest.cc b/libweave/external/crypto/p224_spake_unittest.cc
index 15b5be2..03c9072 100644
--- a/libweave/external/crypto/p224_spake_unittest.cc
+++ b/libweave/external/crypto/p224_spake_unittest.cc
@@ -1,15 +1,16 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright 2011 The Chromium OS 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 "crypto/p224_spake.h"
+#include "libweave/external/crypto/p224_spake.h"
#include <string>
-#include "base/logging.h"
-#include "base/strings/string_number_conversions.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include <base/logging.h>
+#include <base/strings/string_number_conversions.h>
+#include <gtest/gtest.h>
+namespace weave {
namespace crypto {
namespace {
@@ -172,3 +173,4 @@
}
} // namespace crypto
+} // namespace weave
diff --git a/libweave/external/crypto/p224_unittest.cc b/libweave/external/crypto/p224_unittest.cc
index aaf5f59..5d149da 100644
--- a/libweave/external/crypto/p224_unittest.cc
+++ b/libweave/external/crypto/p224_unittest.cc
@@ -1,14 +1,15 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2012 The Chromium OS 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 <string.h>
#include <stdio.h>
+#include <string.h>
-#include "crypto/p224.h"
+#include <gtest/gtest.h>
-#include "testing/gtest/include/gtest/gtest.h"
+#include "libweave/external/crypto/p224.h"
+namespace weave {
namespace crypto {
using p224::Point;
@@ -777,8 +778,8 @@
const std::string external = point.ToString();
ASSERT_EQ(external.size(), 56u);
- EXPECT_TRUE(memcmp(external.data(), kBasePointExternal,
- sizeof(kBasePointExternal)) == 0);
+ EXPECT_EQ(0, memcmp(external.data(), kBasePointExternal,
+ sizeof(kBasePointExternal)));
}
TEST(P224, ScalarBaseMult) {
@@ -788,8 +789,8 @@
p224::ScalarBaseMult(kNISTTestVectors[i].scalar, &point);
const std::string external = point.ToString();
ASSERT_EQ(external.size(), 56u);
- EXPECT_TRUE(memcmp(external.data(), kNISTTestVectors[i].affine,
- external.size()) == 0);
+ EXPECT_EQ(0, memcmp(external.data(), kNISTTestVectors[i].affine,
+ external.size()));
}
}
@@ -803,7 +804,7 @@
p224::Negate(b, &minus_b);
p224::Add(a, b, &sum);
- EXPECT_TRUE(memcmp(&sum, &a, sizeof(sum)) != 0);
+ EXPECT_NE(0, memcmp(&sum, &a, sizeof(sum)));
p224::Add(minus_b, sum, &a_again);
EXPECT_TRUE(a_again.ToString() == a.ToString());
}
@@ -815,10 +816,11 @@
// Test that x^0 = ∞.
Point a;
p224::ScalarBaseMult(reinterpret_cast<const uint8*>(zeros), &a);
- EXPECT_TRUE(memcmp(zeros, a.ToString().data(), sizeof(zeros)) == 0);
+ EXPECT_EQ(0, memcmp(zeros, a.ToString().data(), sizeof(zeros)));
// We shouldn't allow ∞ to be imported.
EXPECT_FALSE(a.SetFromString(std::string(zeros, sizeof(zeros))));
}
} // namespace crypto
+} // namespace weave
diff --git a/libweave/external/crypto/random.cc b/libweave/external/crypto/random.cc
deleted file mode 100644
index a19bb1a..0000000
--- a/libweave/external/crypto/random.cc
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2012 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 "crypto/random.h"
-
-#include "base/rand_util.h"
-
-namespace crypto {
-
-void RandBytes(void *bytes, size_t length) {
- // It's OK to call base::RandBytes(), because it's already strongly random.
- // But _other_ code should go through this function to ensure that code which
- // needs secure randomness is easily discoverable.
- base::RandBytes(bytes, length);
-}
-
-} // namespace crypto
-
diff --git a/libweave/external/crypto/random.h b/libweave/external/crypto/random.h
deleted file mode 100644
index 002616b..0000000
--- a/libweave/external/crypto/random.h
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) 2012 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.
-
-#ifndef CRYPTO_RANDOM_H_
-#define CRYPTO_RANDOM_H_
-
-#include <stddef.h>
-
-#include "crypto/crypto_export.h"
-
-namespace crypto {
-
-// Fills the given buffer with |length| random bytes of cryptographically
-// secure random numbers.
-// |length| must be positive.
-CRYPTO_EXPORT void RandBytes(void *bytes, size_t length);
-
-}
-
-#endif
diff --git a/libweave/external/crypto/secure_util.cc b/libweave/external/crypto/secure_util.cc
deleted file mode 100644
index 3fe8aa9..0000000
--- a/libweave/external/crypto/secure_util.cc
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2011 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 "crypto/secure_util.h"
-
-namespace crypto {
-
-bool SecureMemEqual(const void* s1, const void* s2, size_t n) {
- const unsigned char* s1_ptr = reinterpret_cast<const unsigned char*>(s1);
- const unsigned char* s2_ptr = reinterpret_cast<const unsigned char*>(s2);
- unsigned char tmp = 0;
- for (size_t i = 0; i < n; ++i, ++s1_ptr, ++s2_ptr)
- tmp |= *s1_ptr ^ *s2_ptr;
- return (tmp == 0);
-}
-
-} // namespace crypto
-
diff --git a/libweave/external/crypto/secure_util.h b/libweave/external/crypto/secure_util.h
deleted file mode 100644
index cfe05ca..0000000
--- a/libweave/external/crypto/secure_util.h
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) 2012 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.
-
-#ifndef CRYPTO_SECURE_UTIL_H_
-#define CRYPTO_SECURE_UTIL_H_
-
-#include <stddef.h>
-
-#include "crypto/crypto_export.h"
-
-namespace crypto {
-
-// Performs a constant-time comparison of two strings, returning true if the
-// strings are equal.
-//
-// For cryptographic operations, comparison functions such as memcmp() may
-// expose side-channel information about input, allowing an attacker to
-// perform timing analysis to determine what the expected bits should be. In
-// order to avoid such attacks, the comparison must execute in constant time,
-// so as to not to reveal to the attacker where the difference(s) are.
-// For an example attack, see
-// http://groups.google.com/group/keyczar-discuss/browse_thread/thread/5571eca0948b2a13
-CRYPTO_EXPORT bool SecureMemEqual(const void* s1, const void* s2, size_t n);
-
-} // namespace crypto
-
-#endif // CRYPTO_SECURE_UTIL_H_
-
diff --git a/libweave/external/crypto/sha2.cc b/libweave/external/crypto/sha2.cc
index 6f36237..59a111d 100644
--- a/libweave/external/crypto/sha2.cc
+++ b/libweave/external/crypto/sha2.cc
@@ -1,25 +1,33 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2012 The Chromium OS 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 "crypto/sha2.h"
+#include "libweave/external/crypto/sha2.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/stl_util.h"
-#include "crypto/secure_hash.h"
+#include <algorithm>
+#include <openssl/sha.h>
+#include <base/memory/scoped_ptr.h>
+
+namespace weave {
namespace crypto {
-void SHA256HashString(const base::StringPiece& str, void* output, size_t len) {
- scoped_ptr<SecureHash> ctx(SecureHash::Create(SecureHash::SHA256));
- ctx->Update(str.data(), str.length());
- ctx->Finish(output, len);
+void SHA256HashString(const base::StringPiece& str, uint8_t* output,
+ size_t len) {
+ std::string hash = SHA256HashString(str);
+ len = std::min(hash.size(), len);
+ std::copy(hash.begin(), hash.begin() + len, output);
}
std::string SHA256HashString(const base::StringPiece& str) {
- std::string output(kSHA256Length, 0);
- SHA256HashString(str, string_as_array(&output), output.size());
- return output;
+ SHA256_CTX sha_context;
+ SHA256_Init(&sha_context);
+ SHA256_Update(&sha_context, str.data(), str.size());
+
+ std::string hash(kSHA256Length, 0);
+ SHA256_Final(reinterpret_cast<uint8_t*>(&hash[0]), &sha_context);
+ return hash;
}
} // namespace crypto
+} // namespace weave
diff --git a/libweave/external/crypto/sha2.h b/libweave/external/crypto/sha2.h
index 7e279d3..34f6af8 100644
--- a/libweave/external/crypto/sha2.h
+++ b/libweave/external/crypto/sha2.h
@@ -1,15 +1,15 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CRYPTO_SHA2_H_
-#define CRYPTO_SHA2_H_
+#ifndef LIBWEAVE_EXTERNAL_CRYPTO_SHA2_H_
+#define LIBWEAVE_EXTERNAL_CRYPTO_SHA2_H_
#include <string>
-#include "base/strings/string_piece.h"
-#include "crypto/crypto_export.h"
+#include <base/strings/string_piece.h>
+namespace weave {
namespace crypto {
// These functions perform SHA-256 operations.
@@ -21,13 +21,14 @@
// Computes the SHA-256 hash of the input string 'str' and stores the first
// 'len' bytes of the hash in the output buffer 'output'. If 'len' > 32,
// only 32 bytes (the full hash) are stored in the 'output' buffer.
-CRYPTO_EXPORT void SHA256HashString(const base::StringPiece& str,
- void* output, size_t len);
+void SHA256HashString(const base::StringPiece& str, uint8_t* output,
+ size_t len);
// Convenience version of the above that returns the result in a 32-byte
// string.
-CRYPTO_EXPORT std::string SHA256HashString(const base::StringPiece& str);
+std::string SHA256HashString(const base::StringPiece& str);
} // namespace crypto
+} // namespace weave
-#endif // CRYPTO_SHA2_H_
+#endif // LIBWEAVE_EXTERNAL_CRYPTO_SHA2_H_
diff --git a/libweave/external/crypto/sha2_unittest.cc b/libweave/external/crypto/sha2_unittest.cc
index 78da136..a128840 100644
--- a/libweave/external/crypto/sha2_unittest.cc
+++ b/libweave/external/crypto/sha2_unittest.cc
@@ -1,11 +1,13 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright 2011 The Chromium OS 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 "crypto/sha2.h"
+#include "libweave/external/crypto/sha2.h"
-#include "base/basictypes.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include <base/basictypes.h>
+#include <gtest/gtest.h>
+
+namespace weave {
TEST(Sha256Test, Test1) {
// Example B.1 from FIPS 180-2: one-block message.
@@ -98,3 +100,5 @@
for (size_t i = 0; i < sizeof(output_truncated3); i++)
EXPECT_EQ(expected3[i], static_cast<int>(output_truncated3[i]));
}
+
+} // namespace weave
diff --git a/libweave/libweave.gyp b/libweave/libweave.gyp
index 527c246..0f0a543 100644
--- a/libweave/libweave.gyp
+++ b/libweave/libweave.gyp
@@ -14,6 +14,15 @@
},
'targets': [
{
+ 'target_name': 'libweave_external',
+ 'type': 'static_library',
+ 'sources': [
+ 'external/crypto/p224.cc',
+ 'external/crypto/p224_spake.cc',
+ 'external/crypto/sha2.cc',
+ ],
+ },
+ {
'target_name': 'libweave_common',
'type': 'static_library',
'sources': [
@@ -69,6 +78,7 @@
],
'dependencies': [
'libweave_common',
+ 'libweave_external',
],
'sources': [
'src/empty.cc',
@@ -100,10 +110,14 @@
},
'dependencies': [
'libweave_common',
+ 'libweave_external',
'libweave-test-<(libbase_ver)',
],
'includes': ['../common-mk/common_test.gypi'],
'sources': [
+ 'external/crypto/p224_spake_unittest.cc',
+ 'external/crypto/p224_unittest.cc',
+ 'external/crypto/sha2_unittest.cc',
'src/base_api_handler_unittest.cc',
'src/buffet_config_unittest.cc',
'src/commands/cloud_command_proxy_unittest.cc',
diff --git a/libweave/src/privet/security_manager.cc b/libweave/src/privet/security_manager.cc
index 86a09dc..fe33de9 100644
--- a/libweave/src/privet/security_manager.cc
+++ b/libweave/src/privet/security_manager.cc
@@ -21,7 +21,7 @@
#include <chromeos/data_encoding.h>
#include <chromeos/key_value_store.h>
#include <chromeos/strings/string_utils.h>
-#include <crypto/p224_spake.h>
+#include "libweave/external/crypto/p224_spake.h"
#include "libweave/src/privet/constants.h"
#include "libweave/src/privet/openssl_utils.h"
diff --git a/libweave/src/privet/security_manager_unittest.cc b/libweave/src/privet/security_manager_unittest.cc
index cf1e044..9c995be 100644
--- a/libweave/src/privet/security_manager_unittest.cc
+++ b/libweave/src/privet/security_manager_unittest.cc
@@ -22,7 +22,7 @@
#include <chromeos/data_encoding.h>
#include <chromeos/key_value_store.h>
#include <chromeos/strings/string_utils.h>
-#include <crypto/p224_spake.h>
+#include "libweave/external/crypto/p224_spake.h"
#include <gmock/gmock.h>
#include <gtest/gtest.h>