aboutsummaryrefslogblamecommitdiff
path: root/src/crypto/example.cpp
blob: a8b6b7462fd4564cbc9133ca9b271581df688dda (plain) (tree)









































                                                                   
#include <assert.h>

#include "crypto.h"
#include "random.h"

using namespace crypto;

int main(int argc, char *argv[]) {
  char message[10];
  hash mh;
  public_key pk1, pk2;
  secret_key sk1, sk2;
  key_image ki;
  public_key *ppk[2];
  signature sig[2];
  bool res;
  /* Call this before using functions that depend on randomness. */
  init_random();
  /* Generate a random message. */
  generate_random_bytes(sizeof message, message);
  /* Find its hash */
  keccak(message, sizeof message, mh);
  /* Generate some keys */
  generate_keys(pk1, sk1);
  generate_keys(pk2, sk2);
  /* Sign the message */
  generate_signature(mh, pk1, sk1, sig[0]);
  /* Check the signature */
  res = check_signature(mh, pk1, sig[0]);
  assert(res);
  /* Sign the message using ring signature */
  /* First, generate a key image */
  generate_key_image(pk2, sk2, ki);
  /* Then, generate the signature */
  ppk[0] = &pk1;
  ppk[1] = &pk2;
  generate_ring_signature(mh, ki, ppk, 2, sk2, 1, sig);
  /* Check it */
  res = check_ring_signature(mh, ki, ppk, 2, sig);
  assert(res);
  return 0;
}