package com.robonobo.wang.client; import java.math.BigInteger; import java.security.NoSuchAlgorithmException; import com.robonobo.wang.beans.BlindedCoin; import com.robonobo.wang.beans.Coin; import com.robonobo.wang.beans.CoinRequestPrivate; import com.robonobo.wang.beans.CoinRequestPublic; import com.robonobo.wang.beans.DenominationPrivate; import com.robonobo.wang.beans.DenominationPublic; public class LucreFacade { public LucreFacade() { } public DenominationPrivate createDenomination(int denomExponent, int keyLength) { DenominationPrivate d = new DenominationPrivate(keyLength); d.setDenom(denomExponent); return d; } public CoinRequestPrivate createCoinRequest(DenominationPublic denom) { CoinRequestPrivate c; try { c = new CoinRequestPrivate(denom); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } c.setDenom(denom.getDenom()); return c; } public BlindedCoin signCoinRequest(DenominationPrivate denomPriv, CoinRequestPublic coinReqPub) { BigInteger signature = denomPriv.signRequest(coinReqPub); BlindedCoin coin = new BlindedCoin(signature); coin.setDenom(denomPriv.getDenom()); return coin; } public Coin unblindCoin(DenominationPublic denomPub, BlindedCoin blindedCoin, CoinRequestPrivate coinReqPriv) { uk.co.aldigital.ben.lucre.Coin lucreCoin = coinReqPriv.processResponse(denomPub, blindedCoin.getSignature()); Coin wangCoin = new Coin(lucreCoin.getCoinId(), lucreCoin.getSignature()); wangCoin.setDenom(denomPub.getDenom()); return wangCoin; } public boolean verifyCoin(DenominationPrivate denomPriv, Coin coin) { try { return denomPriv.verify(coin); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } } }