1296781Sdes/* $OpenBSD: test_file.c,v 1.5 2015/10/06 01:20:59 djm Exp $ */ 2276707Sdes/* 3276707Sdes * Regress test for sshkey.h key management API 4276707Sdes * 5276707Sdes * Placed in the public domain 6276707Sdes */ 7276707Sdes 8276707Sdes#include "includes.h" 9276707Sdes 10276707Sdes#include <sys/types.h> 11276707Sdes#include <sys/param.h> 12276707Sdes#include <sys/stat.h> 13276707Sdes#include <fcntl.h> 14276707Sdes#include <stdio.h> 15276707Sdes#ifdef HAVE_STDINT_H 16276707Sdes#include <stdint.h> 17276707Sdes#endif 18276707Sdes#include <stdlib.h> 19276707Sdes#include <string.h> 20276707Sdes#include <unistd.h> 21276707Sdes 22276707Sdes#include <openssl/bn.h> 23276707Sdes#include <openssl/rsa.h> 24276707Sdes#include <openssl/dsa.h> 25276707Sdes#include <openssl/objects.h> 26276707Sdes#ifdef OPENSSL_HAS_NISTP256 27276707Sdes# include <openssl/ec.h> 28276707Sdes#endif 29276707Sdes 30276707Sdes#include "../test_helper/test_helper.h" 31276707Sdes 32276707Sdes#include "ssherr.h" 33276707Sdes#include "authfile.h" 34276707Sdes#include "sshkey.h" 35276707Sdes#include "sshbuf.h" 36295367Sdes#include "digest.h" 37276707Sdes 38276707Sdes#include "common.h" 39276707Sdes 40276707Sdesvoid sshkey_file_tests(void); 41276707Sdes 42276707Sdesvoid 43276707Sdessshkey_file_tests(void) 44276707Sdes{ 45276707Sdes struct sshkey *k1, *k2; 46276707Sdes struct sshbuf *buf, *pw; 47276707Sdes BIGNUM *a, *b, *c; 48276707Sdes char *cp; 49276707Sdes 50276707Sdes TEST_START("load passphrase"); 51276707Sdes pw = load_text_file("pw"); 52276707Sdes TEST_DONE(); 53276707Sdes 54295367Sdes#ifdef WITH_SSH1 55276707Sdes TEST_START("parse RSA1 from private"); 56276707Sdes buf = load_file("rsa1_1"); 57296781Sdes ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", &k1, NULL), 0); 58276707Sdes sshbuf_free(buf); 59276707Sdes ASSERT_PTR_NE(k1, NULL); 60276707Sdes a = load_bignum("rsa1_1.param.n"); 61276707Sdes ASSERT_BIGNUM_EQ(k1->rsa->n, a); 62276707Sdes BN_free(a); 63276707Sdes TEST_DONE(); 64276707Sdes 65276707Sdes TEST_START("parse RSA1 from private w/ passphrase"); 66276707Sdes buf = load_file("rsa1_1_pw"); 67276707Sdes ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, 68296781Sdes (const char *)sshbuf_ptr(pw), &k2, NULL), 0); 69276707Sdes sshbuf_free(buf); 70276707Sdes ASSERT_PTR_NE(k2, NULL); 71276707Sdes ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); 72276707Sdes sshkey_free(k2); 73276707Sdes TEST_DONE(); 74276707Sdes 75276707Sdes TEST_START("load RSA1 from public"); 76276707Sdes ASSERT_INT_EQ(sshkey_load_public(test_data_file("rsa1_1.pub"), &k2, 77276707Sdes NULL), 0); 78276707Sdes ASSERT_PTR_NE(k2, NULL); 79276707Sdes ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); 80276707Sdes sshkey_free(k2); 81276707Sdes TEST_DONE(); 82276707Sdes 83276707Sdes TEST_START("RSA1 key hex fingerprint"); 84276707Sdes buf = load_text_file("rsa1_1.fp"); 85295367Sdes cp = sshkey_fingerprint(k1, SSH_DIGEST_SHA256, SSH_FP_BASE64); 86276707Sdes ASSERT_PTR_NE(cp, NULL); 87276707Sdes ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); 88276707Sdes sshbuf_free(buf); 89276707Sdes free(cp); 90276707Sdes TEST_DONE(); 91276707Sdes 92276707Sdes TEST_START("RSA1 key bubblebabble fingerprint"); 93276707Sdes buf = load_text_file("rsa1_1.fp.bb"); 94295367Sdes cp = sshkey_fingerprint(k1, SSH_DIGEST_SHA1, SSH_FP_BUBBLEBABBLE); 95276707Sdes ASSERT_PTR_NE(cp, NULL); 96276707Sdes ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); 97276707Sdes sshbuf_free(buf); 98276707Sdes free(cp); 99276707Sdes TEST_DONE(); 100276707Sdes 101276707Sdes sshkey_free(k1); 102295367Sdes#endif 103276707Sdes 104276707Sdes TEST_START("parse RSA from private"); 105276707Sdes buf = load_file("rsa_1"); 106296781Sdes ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", &k1, NULL), 0); 107276707Sdes sshbuf_free(buf); 108276707Sdes ASSERT_PTR_NE(k1, NULL); 109276707Sdes a = load_bignum("rsa_1.param.n"); 110276707Sdes b = load_bignum("rsa_1.param.p"); 111276707Sdes c = load_bignum("rsa_1.param.q"); 112276707Sdes ASSERT_BIGNUM_EQ(k1->rsa->n, a); 113276707Sdes ASSERT_BIGNUM_EQ(k1->rsa->p, b); 114276707Sdes ASSERT_BIGNUM_EQ(k1->rsa->q, c); 115276707Sdes BN_free(a); 116276707Sdes BN_free(b); 117276707Sdes BN_free(c); 118276707Sdes TEST_DONE(); 119276707Sdes 120276707Sdes TEST_START("parse RSA from private w/ passphrase"); 121276707Sdes buf = load_file("rsa_1_pw"); 122276707Sdes ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, 123296781Sdes (const char *)sshbuf_ptr(pw), &k2, NULL), 0); 124276707Sdes sshbuf_free(buf); 125276707Sdes ASSERT_PTR_NE(k2, NULL); 126276707Sdes ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); 127276707Sdes sshkey_free(k2); 128276707Sdes TEST_DONE(); 129276707Sdes 130276707Sdes TEST_START("parse RSA from new-format"); 131276707Sdes buf = load_file("rsa_n"); 132296781Sdes ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", &k2, NULL), 0); 133276707Sdes sshbuf_free(buf); 134276707Sdes ASSERT_PTR_NE(k2, NULL); 135276707Sdes ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); 136276707Sdes sshkey_free(k2); 137276707Sdes TEST_DONE(); 138276707Sdes 139276707Sdes TEST_START("parse RSA from new-format w/ passphrase"); 140276707Sdes buf = load_file("rsa_n_pw"); 141276707Sdes ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, 142296781Sdes (const char *)sshbuf_ptr(pw), &k2, NULL), 0); 143276707Sdes sshbuf_free(buf); 144276707Sdes ASSERT_PTR_NE(k2, NULL); 145276707Sdes ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); 146276707Sdes sshkey_free(k2); 147276707Sdes TEST_DONE(); 148276707Sdes 149276707Sdes TEST_START("load RSA from public"); 150276707Sdes ASSERT_INT_EQ(sshkey_load_public(test_data_file("rsa_1.pub"), &k2, 151276707Sdes NULL), 0); 152276707Sdes ASSERT_PTR_NE(k2, NULL); 153276707Sdes ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); 154276707Sdes sshkey_free(k2); 155276707Sdes TEST_DONE(); 156276707Sdes 157276707Sdes TEST_START("load RSA cert"); 158276707Sdes ASSERT_INT_EQ(sshkey_load_cert(test_data_file("rsa_1"), &k2), 0); 159276707Sdes ASSERT_PTR_NE(k2, NULL); 160276707Sdes ASSERT_INT_EQ(k2->type, KEY_RSA_CERT); 161276707Sdes ASSERT_INT_EQ(sshkey_equal(k1, k2), 0); 162276707Sdes ASSERT_INT_EQ(sshkey_equal_public(k1, k2), 1); 163276707Sdes TEST_DONE(); 164276707Sdes 165276707Sdes TEST_START("RSA key hex fingerprint"); 166276707Sdes buf = load_text_file("rsa_1.fp"); 167295367Sdes cp = sshkey_fingerprint(k1, SSH_DIGEST_SHA256, SSH_FP_BASE64); 168276707Sdes ASSERT_PTR_NE(cp, NULL); 169276707Sdes ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); 170276707Sdes sshbuf_free(buf); 171276707Sdes free(cp); 172276707Sdes TEST_DONE(); 173276707Sdes 174276707Sdes TEST_START("RSA cert hex fingerprint"); 175276707Sdes buf = load_text_file("rsa_1-cert.fp"); 176295367Sdes cp = sshkey_fingerprint(k2, SSH_DIGEST_SHA256, SSH_FP_BASE64); 177276707Sdes ASSERT_PTR_NE(cp, NULL); 178276707Sdes ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); 179276707Sdes sshbuf_free(buf); 180276707Sdes free(cp); 181276707Sdes sshkey_free(k2); 182276707Sdes TEST_DONE(); 183276707Sdes 184276707Sdes TEST_START("RSA key bubblebabble fingerprint"); 185276707Sdes buf = load_text_file("rsa_1.fp.bb"); 186295367Sdes cp = sshkey_fingerprint(k1, SSH_DIGEST_SHA1, SSH_FP_BUBBLEBABBLE); 187276707Sdes ASSERT_PTR_NE(cp, NULL); 188276707Sdes ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); 189276707Sdes sshbuf_free(buf); 190276707Sdes free(cp); 191276707Sdes TEST_DONE(); 192276707Sdes 193276707Sdes sshkey_free(k1); 194276707Sdes 195276707Sdes TEST_START("parse DSA from private"); 196276707Sdes buf = load_file("dsa_1"); 197296781Sdes ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", &k1, NULL), 0); 198276707Sdes sshbuf_free(buf); 199276707Sdes ASSERT_PTR_NE(k1, NULL); 200276707Sdes a = load_bignum("dsa_1.param.g"); 201276707Sdes b = load_bignum("dsa_1.param.priv"); 202276707Sdes c = load_bignum("dsa_1.param.pub"); 203276707Sdes ASSERT_BIGNUM_EQ(k1->dsa->g, a); 204276707Sdes ASSERT_BIGNUM_EQ(k1->dsa->priv_key, b); 205276707Sdes ASSERT_BIGNUM_EQ(k1->dsa->pub_key, c); 206276707Sdes BN_free(a); 207276707Sdes BN_free(b); 208276707Sdes BN_free(c); 209276707Sdes TEST_DONE(); 210276707Sdes 211276707Sdes TEST_START("parse DSA from private w/ passphrase"); 212276707Sdes buf = load_file("dsa_1_pw"); 213276707Sdes ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, 214296781Sdes (const char *)sshbuf_ptr(pw), &k2, NULL), 0); 215276707Sdes sshbuf_free(buf); 216276707Sdes ASSERT_PTR_NE(k2, NULL); 217276707Sdes ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); 218276707Sdes sshkey_free(k2); 219276707Sdes TEST_DONE(); 220276707Sdes 221276707Sdes TEST_START("parse DSA from new-format"); 222276707Sdes buf = load_file("dsa_n"); 223296781Sdes ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", &k2, NULL), 0); 224276707Sdes sshbuf_free(buf); 225276707Sdes ASSERT_PTR_NE(k2, NULL); 226276707Sdes ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); 227276707Sdes sshkey_free(k2); 228276707Sdes TEST_DONE(); 229276707Sdes 230276707Sdes TEST_START("parse DSA from new-format w/ passphrase"); 231276707Sdes buf = load_file("dsa_n_pw"); 232276707Sdes ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, 233296781Sdes (const char *)sshbuf_ptr(pw), &k2, NULL), 0); 234276707Sdes sshbuf_free(buf); 235276707Sdes ASSERT_PTR_NE(k2, NULL); 236276707Sdes ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); 237276707Sdes sshkey_free(k2); 238276707Sdes TEST_DONE(); 239276707Sdes 240276707Sdes TEST_START("load DSA from public"); 241276707Sdes ASSERT_INT_EQ(sshkey_load_public(test_data_file("dsa_1.pub"), &k2, 242276707Sdes NULL), 0); 243276707Sdes ASSERT_PTR_NE(k2, NULL); 244276707Sdes ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); 245276707Sdes sshkey_free(k2); 246276707Sdes TEST_DONE(); 247276707Sdes 248276707Sdes TEST_START("load DSA cert"); 249276707Sdes ASSERT_INT_EQ(sshkey_load_cert(test_data_file("dsa_1"), &k2), 0); 250276707Sdes ASSERT_PTR_NE(k2, NULL); 251276707Sdes ASSERT_INT_EQ(k2->type, KEY_DSA_CERT); 252276707Sdes ASSERT_INT_EQ(sshkey_equal(k1, k2), 0); 253276707Sdes ASSERT_INT_EQ(sshkey_equal_public(k1, k2), 1); 254276707Sdes TEST_DONE(); 255276707Sdes 256276707Sdes TEST_START("DSA key hex fingerprint"); 257276707Sdes buf = load_text_file("dsa_1.fp"); 258295367Sdes cp = sshkey_fingerprint(k1, SSH_DIGEST_SHA256, SSH_FP_BASE64); 259276707Sdes ASSERT_PTR_NE(cp, NULL); 260276707Sdes ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); 261276707Sdes sshbuf_free(buf); 262276707Sdes free(cp); 263276707Sdes TEST_DONE(); 264276707Sdes 265276707Sdes TEST_START("DSA cert hex fingerprint"); 266276707Sdes buf = load_text_file("dsa_1-cert.fp"); 267295367Sdes cp = sshkey_fingerprint(k2, SSH_DIGEST_SHA256, SSH_FP_BASE64); 268276707Sdes ASSERT_PTR_NE(cp, NULL); 269276707Sdes ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); 270276707Sdes sshbuf_free(buf); 271276707Sdes free(cp); 272276707Sdes sshkey_free(k2); 273276707Sdes TEST_DONE(); 274276707Sdes 275276707Sdes TEST_START("DSA key bubblebabble fingerprint"); 276276707Sdes buf = load_text_file("dsa_1.fp.bb"); 277295367Sdes cp = sshkey_fingerprint(k1, SSH_DIGEST_SHA1, SSH_FP_BUBBLEBABBLE); 278276707Sdes ASSERT_PTR_NE(cp, NULL); 279276707Sdes ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); 280276707Sdes sshbuf_free(buf); 281276707Sdes free(cp); 282276707Sdes TEST_DONE(); 283276707Sdes 284276707Sdes sshkey_free(k1); 285276707Sdes 286276707Sdes#ifdef OPENSSL_HAS_ECC 287276707Sdes TEST_START("parse ECDSA from private"); 288276707Sdes buf = load_file("ecdsa_1"); 289296781Sdes ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", &k1, NULL), 0); 290276707Sdes sshbuf_free(buf); 291276707Sdes ASSERT_PTR_NE(k1, NULL); 292276707Sdes buf = load_text_file("ecdsa_1.param.curve"); 293276707Sdes ASSERT_STRING_EQ((const char *)sshbuf_ptr(buf), 294276707Sdes OBJ_nid2sn(k1->ecdsa_nid)); 295276707Sdes sshbuf_free(buf); 296276707Sdes a = load_bignum("ecdsa_1.param.priv"); 297276707Sdes b = load_bignum("ecdsa_1.param.pub"); 298276707Sdes c = EC_POINT_point2bn(EC_KEY_get0_group(k1->ecdsa), 299276707Sdes EC_KEY_get0_public_key(k1->ecdsa), POINT_CONVERSION_UNCOMPRESSED, 300276707Sdes NULL, NULL); 301276707Sdes ASSERT_PTR_NE(c, NULL); 302276707Sdes ASSERT_BIGNUM_EQ(EC_KEY_get0_private_key(k1->ecdsa), a); 303276707Sdes ASSERT_BIGNUM_EQ(b, c); 304276707Sdes BN_free(a); 305276707Sdes BN_free(b); 306276707Sdes BN_free(c); 307276707Sdes TEST_DONE(); 308276707Sdes 309276707Sdes TEST_START("parse ECDSA from private w/ passphrase"); 310276707Sdes buf = load_file("ecdsa_1_pw"); 311276707Sdes ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, 312296781Sdes (const char *)sshbuf_ptr(pw), &k2, NULL), 0); 313276707Sdes sshbuf_free(buf); 314276707Sdes ASSERT_PTR_NE(k2, NULL); 315276707Sdes ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); 316276707Sdes sshkey_free(k2); 317276707Sdes TEST_DONE(); 318276707Sdes 319276707Sdes TEST_START("parse ECDSA from new-format"); 320276707Sdes buf = load_file("ecdsa_n"); 321296781Sdes ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", &k2, NULL), 0); 322276707Sdes sshbuf_free(buf); 323276707Sdes ASSERT_PTR_NE(k2, NULL); 324276707Sdes ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); 325276707Sdes sshkey_free(k2); 326276707Sdes TEST_DONE(); 327276707Sdes 328276707Sdes TEST_START("parse ECDSA from new-format w/ passphrase"); 329276707Sdes buf = load_file("ecdsa_n_pw"); 330276707Sdes ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, 331296781Sdes (const char *)sshbuf_ptr(pw), &k2, NULL), 0); 332276707Sdes sshbuf_free(buf); 333276707Sdes ASSERT_PTR_NE(k2, NULL); 334276707Sdes ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); 335276707Sdes sshkey_free(k2); 336276707Sdes TEST_DONE(); 337276707Sdes 338276707Sdes TEST_START("load ECDSA from public"); 339276707Sdes ASSERT_INT_EQ(sshkey_load_public(test_data_file("ecdsa_1.pub"), &k2, 340276707Sdes NULL), 0); 341276707Sdes ASSERT_PTR_NE(k2, NULL); 342276707Sdes ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); 343276707Sdes sshkey_free(k2); 344276707Sdes TEST_DONE(); 345276707Sdes 346276707Sdes TEST_START("load ECDSA cert"); 347276707Sdes ASSERT_INT_EQ(sshkey_load_cert(test_data_file("ecdsa_1"), &k2), 0); 348276707Sdes ASSERT_PTR_NE(k2, NULL); 349276707Sdes ASSERT_INT_EQ(k2->type, KEY_ECDSA_CERT); 350276707Sdes ASSERT_INT_EQ(sshkey_equal(k1, k2), 0); 351276707Sdes ASSERT_INT_EQ(sshkey_equal_public(k1, k2), 1); 352276707Sdes TEST_DONE(); 353276707Sdes 354276707Sdes TEST_START("ECDSA key hex fingerprint"); 355276707Sdes buf = load_text_file("ecdsa_1.fp"); 356295367Sdes cp = sshkey_fingerprint(k1, SSH_DIGEST_SHA256, SSH_FP_BASE64); 357276707Sdes ASSERT_PTR_NE(cp, NULL); 358276707Sdes ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); 359276707Sdes sshbuf_free(buf); 360276707Sdes free(cp); 361276707Sdes TEST_DONE(); 362276707Sdes 363276707Sdes TEST_START("ECDSA cert hex fingerprint"); 364276707Sdes buf = load_text_file("ecdsa_1-cert.fp"); 365295367Sdes cp = sshkey_fingerprint(k2, SSH_DIGEST_SHA256, SSH_FP_BASE64); 366276707Sdes ASSERT_PTR_NE(cp, NULL); 367276707Sdes ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); 368276707Sdes sshbuf_free(buf); 369276707Sdes free(cp); 370276707Sdes sshkey_free(k2); 371276707Sdes TEST_DONE(); 372276707Sdes 373276707Sdes TEST_START("ECDSA key bubblebabble fingerprint"); 374276707Sdes buf = load_text_file("ecdsa_1.fp.bb"); 375295367Sdes cp = sshkey_fingerprint(k1, SSH_DIGEST_SHA1, SSH_FP_BUBBLEBABBLE); 376276707Sdes ASSERT_PTR_NE(cp, NULL); 377276707Sdes ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); 378276707Sdes sshbuf_free(buf); 379276707Sdes free(cp); 380276707Sdes TEST_DONE(); 381276707Sdes 382276707Sdes sshkey_free(k1); 383276707Sdes#endif /* OPENSSL_HAS_ECC */ 384276707Sdes 385276707Sdes TEST_START("parse Ed25519 from private"); 386276707Sdes buf = load_file("ed25519_1"); 387296781Sdes ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", &k1, NULL), 0); 388276707Sdes sshbuf_free(buf); 389276707Sdes ASSERT_PTR_NE(k1, NULL); 390276707Sdes ASSERT_INT_EQ(k1->type, KEY_ED25519); 391276707Sdes /* XXX check key contents */ 392276707Sdes TEST_DONE(); 393276707Sdes 394276707Sdes TEST_START("parse Ed25519 from private w/ passphrase"); 395276707Sdes buf = load_file("ed25519_1_pw"); 396276707Sdes ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, 397296781Sdes (const char *)sshbuf_ptr(pw), &k2, NULL), 0); 398276707Sdes sshbuf_free(buf); 399276707Sdes ASSERT_PTR_NE(k2, NULL); 400276707Sdes ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); 401276707Sdes sshkey_free(k2); 402276707Sdes TEST_DONE(); 403276707Sdes 404276707Sdes TEST_START("load Ed25519 from public"); 405276707Sdes ASSERT_INT_EQ(sshkey_load_public(test_data_file("ed25519_1.pub"), &k2, 406276707Sdes NULL), 0); 407276707Sdes ASSERT_PTR_NE(k2, NULL); 408276707Sdes ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); 409276707Sdes sshkey_free(k2); 410276707Sdes TEST_DONE(); 411276707Sdes 412276707Sdes TEST_START("load Ed25519 cert"); 413276707Sdes ASSERT_INT_EQ(sshkey_load_cert(test_data_file("ed25519_1"), &k2), 0); 414276707Sdes ASSERT_PTR_NE(k2, NULL); 415276707Sdes ASSERT_INT_EQ(k2->type, KEY_ED25519_CERT); 416276707Sdes ASSERT_INT_EQ(sshkey_equal(k1, k2), 0); 417276707Sdes ASSERT_INT_EQ(sshkey_equal_public(k1, k2), 1); 418276707Sdes TEST_DONE(); 419276707Sdes 420276707Sdes TEST_START("Ed25519 key hex fingerprint"); 421276707Sdes buf = load_text_file("ed25519_1.fp"); 422295367Sdes cp = sshkey_fingerprint(k1, SSH_DIGEST_SHA256, SSH_FP_BASE64); 423276707Sdes ASSERT_PTR_NE(cp, NULL); 424276707Sdes ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); 425276707Sdes sshbuf_free(buf); 426276707Sdes free(cp); 427276707Sdes TEST_DONE(); 428276707Sdes 429276707Sdes TEST_START("Ed25519 cert hex fingerprint"); 430276707Sdes buf = load_text_file("ed25519_1-cert.fp"); 431295367Sdes cp = sshkey_fingerprint(k2, SSH_DIGEST_SHA256, SSH_FP_BASE64); 432276707Sdes ASSERT_PTR_NE(cp, NULL); 433276707Sdes ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); 434276707Sdes sshbuf_free(buf); 435276707Sdes free(cp); 436276707Sdes sshkey_free(k2); 437276707Sdes TEST_DONE(); 438276707Sdes 439276707Sdes TEST_START("Ed25519 key bubblebabble fingerprint"); 440276707Sdes buf = load_text_file("ed25519_1.fp.bb"); 441295367Sdes cp = sshkey_fingerprint(k1, SSH_DIGEST_SHA1, SSH_FP_BUBBLEBABBLE); 442276707Sdes ASSERT_PTR_NE(cp, NULL); 443276707Sdes ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); 444276707Sdes sshbuf_free(buf); 445276707Sdes free(cp); 446276707Sdes TEST_DONE(); 447276707Sdes 448276707Sdes sshkey_free(k1); 449276707Sdes 450276707Sdes sshbuf_free(pw); 451276707Sdes 452276707Sdes} 453