package main

import (
	"bytes"
	"crypto/x509"
	"golang.org/x/crypto/bcrypt"
	"testing"
)

func TestPassword(t *testing.T) {
	good, bad, salts, bgood, err := passwordChecks()
	if err != nil || !good || bad || !salts || !bgood {
		t.Fatal(good, bad, salts, bgood, err)
	}
	if _, err := bcrypt.GenerateFromPassword(bytes.Repeat([]byte("x"), 73), 10); err != bcrypt.ErrPasswordTooLong {
		t.Fatal(err)
	}
}
func TestAEAD(t *testing.T) {
	good, tamper, aad, n, o, err := aeadChecks()
	if err != nil || !good || !tamper || !aad || n != 0 || o != 28 {
		t.Fatal(good, tamper, aad, n, o, err)
	}
}
func TestAuthenticity(t *testing.T) {
	mg, mb, sg, sb := macAndSignature()
	if !mg || mb || !sg || sb {
		t.Fatal(mg, mb, sg, sb)
	}
}
func TestCertificate(t *testing.T) {
	c, err := makeCertificates()
	if err != nil {
		t.Fatal(err)
	}
	if !verifyCert(c, "service.example", x509.ExtKeyUsageServerAuth, c.roots) || verifyCert(c, "wrong.example", x509.ExtKeyUsageServerAuth, c.roots) || verifyCert(c, "service.example", x509.ExtKeyUsageClientAuth, c.roots) || verifyCert(c, "service.example", x509.ExtKeyUsageServerAuth, x509.NewCertPool()) {
		t.Fatal("certificate boundary")
	}
}
