51 lines
1.9 KiB
Go
51 lines
1.9 KiB
Go
package applications
|
|
|
|
import (
|
|
"git.openprivacy.ca/cwtch.im/tapir"
|
|
"git.openprivacy.ca/cwtch.im/tapir/primitives/core"
|
|
"git.openprivacy.ca/openprivacy/log"
|
|
)
|
|
|
|
// TranscriptApp defines a Tapir Meta-App which provides a global cryptographic transcript
|
|
type TranscriptApp struct {
|
|
transcript *core.Transcript
|
|
}
|
|
|
|
// NewInstance creates a new TranscriptApp
|
|
func (TranscriptApp) NewInstance() tapir.Application {
|
|
ta := new(TranscriptApp)
|
|
return ta
|
|
}
|
|
|
|
// Init initializes the cryptographic transcript
|
|
func (ta *TranscriptApp) Init(connection tapir.Connection) {
|
|
if ta.transcript != nil {
|
|
ta.panic()
|
|
}
|
|
ta.transcript = core.NewTranscript("tapir-transcript")
|
|
}
|
|
|
|
// Transcript returns a pointer to the cryptographic transcript
|
|
func (ta *TranscriptApp) Transcript() *core.Transcript {
|
|
return ta.transcript
|
|
}
|
|
|
|
// PropagateTranscript overrides the default transcript and propagates a transcript from a previous session
|
|
func (ta *TranscriptApp) PropagateTranscript(transcript *core.Transcript) {
|
|
if ta.transcript != nil {
|
|
ta.panic()
|
|
}
|
|
ta.transcript = transcript
|
|
}
|
|
|
|
func (ta *TranscriptApp) panic() {
|
|
// Note: if this is ever happens it is a critical application bug
|
|
// This will prevent a misuse of application chains that cause an earlier
|
|
// transcript to be overwritten. Since we expect the security of many higher level applications
|
|
// to be reliant on the randomness provided by the transcript we want to be actively hostile to any potential
|
|
// misuse.
|
|
log.Errorf("apps should not attempt to intitalize or overwrite a transcript once one has been initialized - this is a CRITICAL bug and so we have safely crashed")
|
|
// We could silently fail to do anything here, but that is likely more dangerous in the long run...
|
|
panic("apps should not attempt to intitalize or overwrite a transcript a transcript once one has been initialized - this is a CRITICAL bug and so we have safely crashed")
|
|
}
|