|
|
@ -28,7 +28,6 @@ type SignedBatchWithProof struct { |
|
|
|
} |
|
|
|
|
|
|
|
const tokenBucket = "tokens" |
|
|
|
const keyBucket = "keys" |
|
|
|
|
|
|
|
// NewTokenServer generates a new TokenServer (used mostly for testing with ephemeral instances)
|
|
|
|
func NewTokenServer() *TokenServer { |
|
|
@ -44,29 +43,25 @@ func NewTokenServer() *TokenServer { |
|
|
|
} |
|
|
|
|
|
|
|
// NewTokenServerFromStore generates a new TokenServer backed by a persistence service.
|
|
|
|
func NewTokenServerFromStore(persistenceService persistence.Service) *TokenServer { |
|
|
|
func NewTokenServerFromStore(k *ristretto.Scalar, persistenceService persistence.Service) *TokenServer { |
|
|
|
tokenServer := NewTokenServer() |
|
|
|
persistenceService.Setup([]string{tokenBucket}) |
|
|
|
persistenceService.Setup([]string{keyBucket}) |
|
|
|
exists, err := persistenceService.Check(keyBucket, "k") |
|
|
|
if err != nil { |
|
|
|
panic(err) |
|
|
|
} |
|
|
|
// if we don't have a stored k then save the one we have generated
|
|
|
|
// otherwise use the k we have stored
|
|
|
|
if !exists { |
|
|
|
persistenceService.Persist(keyBucket, "k", tokenServer.k) |
|
|
|
} else { |
|
|
|
persistenceService.Load(keyBucket, "k", tokenServer.k) |
|
|
|
|
|
|
|
// recalculate public key from stored k
|
|
|
|
tokenServer.Y = new(ristretto.Element).ScalarBaseMult(tokenServer.k) |
|
|
|
} |
|
|
|
// recalculate public key from k
|
|
|
|
tokenServer.k = k |
|
|
|
tokenServer.Y = new(ristretto.Element).ScalarBaseMult(tokenServer.k) |
|
|
|
|
|
|
|
tokenServer.persistanceService = persistenceService |
|
|
|
return tokenServer |
|
|
|
} |
|
|
|
|
|
|
|
// Close ensures that the database is properly closed...
|
|
|
|
func (ts *TokenServer) Close() { |
|
|
|
ts.mutex.Lock() |
|
|
|
defer ts.mutex.Unlock() |
|
|
|
ts.persistanceService.Close() |
|
|
|
} |
|
|
|
|
|
|
|
// SignBlindedToken calculates kP for the given BlindedToken P
|
|
|
|
func (ts *TokenServer) SignBlindedToken(bt BlindedToken) SignedToken { |
|
|
|
Q := new(ristretto.Element).ScalarMult(ts.k, bt.P) |
|
|
|