Test rig added, based on RIPEMD160-MGF1 test vectors.
authormdw <mdw>
Sat, 15 Jul 2000 10:03:30 +0000 (10:03 +0000)
committermdw <mdw>
Sat, 15 Jul 2000 10:03:30 +0000 (10:03 +0000)
oaep.c
tests/oaep [new file with mode: 0644]

diff --git a/oaep.c b/oaep.c
index 0e135f2..301e63b 100644 (file)
--- a/oaep.c
+++ b/oaep.c
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: oaep.c,v 1.1 2000/07/01 11:18:30 mdw Exp $
+ * $Id: oaep.c,v 1.2 2000/07/15 10:01:48 mdw Exp $
  *
  * Optimal asymmetric encryption packing
  *
@@ -30,6 +30,9 @@
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: oaep.c,v $
+ * Revision 1.2  2000/07/15 10:01:48  mdw
+ * Test rig added, based on RIPEMD160-MGF1 test vectors.
+ *
  * Revision 1.1  2000/07/01 11:18:30  mdw
  * Support for Optimal Asymmetric Encryption Padding.
  *
@@ -189,4 +192,90 @@ fail:
   return (rc);
 }
 
+/*----- Test rig ----------------------------------------------------------*/
+
+#ifdef TEST_RIG
+
+#include <mLib/testrig.h>
+
+#include "rmd160.h"
+#include "rmd160-mgf.h"
+
+typedef struct gctx {
+  grand r;
+  octet *buf;
+} gctx;
+
+static void rfill(grand *r, void *buf, size_t sz)
+{
+  gctx *g = (gctx *)r;
+  memcpy(buf, g->buf, sz);
+}
+
+static const grand_ops gops = {
+  "const", 0, 0,
+  0, 0,
+  0, 0, 0, 0, rfill
+};
+
+static int verify(dstr *v)
+{
+  gctx gr;
+  dstr d = DSTR_INIT;
+  oaep o;
+  int ok = 1;
+
+  dstr_ensure(&d, v[3].len);
+  d.len = v[3].len;
+  gr.r.ops = &gops;
+  gr.buf = v[2].buf;
+
+  o.cc = &rmd160_mgf;
+  o.ch = &rmd160;
+  o.r = &gr.r;
+  o.ep = v[1].buf;
+  o.epsz = v[1].len;
+
+  if (oaep_encode(v[0].buf, v[0].len, d.buf, d.len, &o) ||
+      memcmp(d.buf, v[3].buf, d.len) != 0) {
+    ok = 0;
+    fputs("\nfailure in oaep_encode", stderr);
+    fputs("\n message = ", stderr); type_hex.dump(&v[0], stderr);
+    fputs("\n  params = ", stderr); type_hex.dump(&v[1], stderr);
+    fputs("\n    salt = ", stderr); type_hex.dump(&v[2], stderr);
+    fputs("\nexpected = ", stderr); type_hex.dump(&v[3], stderr);
+    fputs("\n  output = ", stderr); type_hex.dump(&d, stderr);
+    fputc('\n', stderr);
+  }
+
+  DRESET(&d);
+  if (oaep_decode(v[3].buf, v[3].len, &d, &o) < 0 ||
+      d.len != v[0].len || memcmp(d.buf, v[0].buf, d.len) != 0) {
+    ok = 0;
+    fputs("\nfailure in oaep_decode", stderr);
+    fputs("\n    goop = ", stderr); type_hex.dump(&v[3], stderr);
+    fputs("\n  params = ", stderr); type_hex.dump(&v[1], stderr);
+    fputs("\n    salt = ", stderr); type_hex.dump(&v[2], stderr);
+    fputs("\nexpected = ", stderr); type_hex.dump(&v[0], stderr);
+    fputs("\n  output = ", stderr); type_hex.dump(&d, stderr);
+    fputc('\n', stderr);
+  }
+
+  dstr_destroy(&d);
+  return (ok);
+}
+
+static test_chunk tests[] = {
+  { "oaep", verify, { &type_hex, &type_hex, &type_hex, &type_hex, 0 } },
+  { 0, 0, { 0 } }
+};
+
+int main(int argc, char *argv[])
+{
+  test_run(argc, argv, tests, SRCDIR "/tests/oaep");
+  return (0);
+}
+
+#endif
+
 /*----- That's all, folks -------------------------------------------------*/
diff --git a/tests/oaep b/tests/oaep
new file mode 100644 (file)
index 0000000..de1e313
--- /dev/null
@@ -0,0 +1,14 @@
+# $Id: oaep,v 1.1 2000/07/15 10:03:30 mdw Exp $
+#
+# Test vectors for OAEP encoding
+
+# --- From http://wwww.esat.kuleuven.ac.be/~bosselae/ripemd160.html ---
+
+oaep {
+  54859b342c49ea2a "" aafd12f659cae63489b479e5076ddec2f06cb58f
+       007dcfd33b1ca1107625a3fbd99075e7c8adc134bf3f5c201b7ad3e8b3ede0b48136002dd2ec034f04cda492db86973642dd59f018b0908a6504b4f845be3236;
+  54859b342c49ea2a 3bf4c66f209e05f2a86eae213322fbf9252d6408 aafd12f659cae63489b479e5076ddec2f06cb58f
+       0062732b7784ac93f3ed97ed1d89c7aedf1e98a21f171240b14fa63ee789e54e78fc34dc63650b0395cda492db86973642dd59f018b0908a6504b4f845be3236;
+  54859b342c49ea2a 2771857832caf8f054940134a736233269f00d42 aafd12f659cae63489b479e5076ddec2f06cb58f
+       00071c2309ec131348e4faeeb5a409135a9c728b72e42e655755cdca7764183c4872204bb51c9bbb2ecda492db86973642dd59f018b0908a6504b4f845be3236;
+}