// Copyright 2015 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.

package main

import vpkg "mojo/services/vanadium/security/public/interfaces/principal"

// wireBlessings encapsulates wire format of a set of a Vanadium blessings
// and the corresponding cryptographic proof that binds them to a principal
// (identified by a public key).
type wireBlessings struct {
	// CertificateChains is an array of chains of certificates that bind
	// a blessing to the public key in the last certificate of the chain.
	CertificateChains [][]certificate
}

// certificate represents the cryptographic proof of the binding of
// extensions of a blessing held by one principal to another (represented by
// a public key) under specific caveats.
//
// For example, if a principal P1 has a blessing "alice", then it can
// extend it with a Certificate to generate the blessing "alice/friend" for
// another principal P2.
type certificate struct {
	Extension string    // Human-readable string extension bound to PublicKey.
	PublicKey []byte    // DER-encoded PKIX public key.
	Caveats   []caveat  // Caveats on the binding of Name to PublicKey.
	Signature signature // Signature by the blessing principal that binds the extension to the public key.
}

// signature represents a digital signature.
type signature struct {
	// Purpose of the signature. Can be used to prevent type attacks.
	// (See Section 4.2 of http://www-users.cs.york.ac.uk/~jac/PublishedPapers/reviewV1_1997.pdf for example).
	// The actual signature (R, S values for ECDSA keys) is produced by signing: Hash(Hash(message), Hash(Purpose)).
	Purpose []byte
	// Cryptographic hash function applied to the message before computing the signature.
	Hash hash
	// Pair of integers that make up an ECDSA signature.
	R []byte
	S []byte
}

// caveat is a condition on the validity of a blessing/discharge.
//
// These conditions are provided when asking a principal to create
// a blessing/discharge, and are verified when validating blessings
//
// Given a Hash, the message digest of a caveat is:
// Hash(Hash(Id), Hash(ParamVom))
type caveat struct {
	Id       [16]byte // The identifier of the caveat validation function.
	ParamVom []byte   // VOM-encoded bytes of the parameters to be provided to the validation function.
}

func newBlessing(wb *wireBlessings) *vpkg.Blessing {
	// TODO(ataly, gauthamt): Below we only consider the first certificate chain
	// in the wireBlessings object. We should handle the case when the wireBlessings
	// object has more than one certificate chain.
	// TODO(ataly, gauthamt): We should validate all caveats present in the certificates.
	var chain []vpkg.Certificate
	for _, c := range wb.CertificateChains[0] {
		chain = append(chain, vpkg.Certificate{Extension: c.Extension})
	}
	return &vpkg.Blessing{chain}
}
