Commit 1e57e905 authored by Sietse Ringers's avatar Sietse Ringers
Browse files

Make erroneous scheme managers non-fatal

parent 7090bfd7
......@@ -28,6 +28,9 @@ type CredentialInfoList []*CredentialInfo
func NewCredentialInfo(ints []*big.Int, conf *Configuration) *CredentialInfo {
meta := MetadataFromInt(ints[0], conf)
credtype := meta.CredentialType()
if credtype == nil {
return nil
}
attrs := make([]TranslatedString, len(credtype.Attributes))
for i := range credtype.Attributes {
......
......@@ -66,6 +66,10 @@ func (oi metaObjectIdentifier) String() string {
return string(oi)
}
func (oi metaObjectIdentifier) Empty() bool {
return len(oi) == 0
}
func (oi metaObjectIdentifier) Root() string {
str := string(oi)
if i := strings.Index(str, "."); i != -1 {
......
......@@ -62,7 +62,8 @@ func EnsureDirectoryExists(path string) error {
}
func Copy(src, dest string) error {
if err := AssertPathExists(src); err != nil {
exists, err := PathExists(src)
if err != nil || !exists {
return err
}
bts, err := ioutil.ReadFile(src)
......
......@@ -129,6 +129,9 @@ func New(
if err != nil {
return nil, err
}
if err = cm.Configuration.ParseFolder(); err != nil {
return nil, err
}
// Ensure storage path exists, and populate it with necessary files
cm.storage = storage{storagePath: storagePath, Configuration: cm.Configuration}
......@@ -146,10 +149,6 @@ func New(
return nil, err
}
if err = cm.Configuration.ParseFolder(); err != nil {
return nil, err
}
// Load our stuff
if cm.secretkey, err = cm.storage.LoadSecretKey(); err != nil {
return nil, err
......@@ -182,6 +181,9 @@ func (client *Client) CredentialInfoList() irma.CredentialInfoList {
for _, attrlistlist := range client.attributes {
for index, attrlist := range attrlistlist {
info := attrlist.Info()
if info == nil {
continue
}
info.Index = index
list = append(list, info)
}
......@@ -194,7 +196,10 @@ func (client *Client) CredentialInfoList() irma.CredentialInfoList {
// addCredential adds the specified credential to the Client, saving its signature
// imediately, and optionally cm.attributes as well.
func (client *Client) addCredential(cred *credential, storeAttributes bool) (err error) {
id := cred.CredentialType().Identifier()
id := irma.NewCredentialTypeIdentifier("")
if cred.CredentialType() != nil {
id = cred.CredentialType().Identifier()
}
// Don't add duplicate creds
for _, attrlistlist := range client.attributes {
......@@ -206,17 +211,19 @@ func (client *Client) addCredential(cred *credential, storeAttributes bool) (err
}
// If this is a singleton credential type, ensure we have at most one by removing any previous instance
if cred.CredentialType().IsSingleton && len(client.creds(id)) > 0 {
if !id.Empty() && cred.CredentialType().IsSingleton && len(client.creds(id)) > 0 {
client.remove(id, 0, false) // Index is 0, because if we're here we have exactly one
}
// Append the new cred to our attributes and credentials
client.attributes[id] = append(client.attrs(id), cred.AttributeList())
if _, exists := client.credentials[id]; !exists {
client.credentials[id] = make(map[int]*credential)
if !id.Empty() {
if _, exists := client.credentials[id]; !exists {
client.credentials[id] = make(map[int]*credential)
}
counter := len(client.attributes[id]) - 1
client.credentials[id][counter] = cred
}
counter := len(client.attributes[id]) - 1
client.credentials[id][counter] = cred
if err = client.storage.StoreSignature(cred); err != nil {
return
......
......@@ -19,6 +19,12 @@ func newCredential(gabicred *gabi.Credential, conf *irma.Configuration) (*creden
Credential: gabicred,
MetadataAttribute: meta,
}
if cred.CredentialType() == nil {
// Unknown credtype, populate Pk field later
return cred, nil
}
var err error
cred.Pk, err = conf.PublicKey(meta.CredentialType().IssuerIdentifier(), cred.KeyCounter())
if err != nil {
......
......@@ -381,6 +381,21 @@ func TestCredentialRemoval(t *testing.T) {
teardown(t)
}
func TestWrongSchemeManager(t *testing.T) {
client := parseStorage(t)
irmademo := irma.NewSchemeManagerIdentifier("irma-demo")
require.Contains(t, client.Configuration.SchemeManagers, irmademo)
require.NoError(t, os.Remove("testdata/storage/test/irma_configuration/irma-demo/index"))
err := client.Configuration.ParseFolder()
_, ok := err.(*irma.SchemeManagerError)
require.True(t, ok)
require.Contains(t, client.Configuration.DisabledSchemeManagers, irmademo)
teardown(t)
}
// Test installing a new scheme manager from a qr, and do a(n issuance) session
// within this manager to test the autmatic downloading of credential definitions,
// issuers, and public keys.
......@@ -390,7 +405,7 @@ func TestDownloadSchemeManager(t *testing.T) {
// Remove irma-demo scheme manager as we need to test adding it
irmademo := irma.NewSchemeManagerIdentifier("irma-demo")
require.Contains(t, client.Configuration.SchemeManagers, irmademo)
require.NoError(t, client.Configuration.RemoveSchemeManager(irmademo))
require.NoError(t, client.Configuration.RemoveSchemeManager(irmademo, true))
require.NotContains(t, client.Configuration.SchemeManagers, irmademo)
// Do an add-scheme-manager-session
......
......@@ -65,11 +65,18 @@ func (client *Client) update() error {
if err != nil {
str := err.Error()
u.Error = &str
} // TODO: err is only stored but not passed on!
}
client.updates = append(client.updates, u)
if err != nil {
break
}
}
return client.storage.StoreUpdates(client.updates)
storeErr := client.storage.StoreUpdates(client.updates)
if storeErr != nil {
return storeErr
}
return err
}
// ParseAndroidStorage parses an Android cardemu.xml shared preferences file
......
......@@ -38,6 +38,8 @@ type Configuration struct {
Issuers map[IssuerIdentifier]*Issuer
CredentialTypes map[CredentialTypeIdentifier]*CredentialType
DisabledSchemeManagers map[SchemeManagerIdentifier]*SchemeManager
publicKeys map[IssuerIdentifier]map[int]*gabi.PublicKey
reverseHashes map[string]CredentialTypeIdentifier
initialized bool
......@@ -53,6 +55,15 @@ type ConfigurationFileHash []byte
// along with their SHA266 hash
type SchemeManagerIndex map[string]ConfigurationFileHash
type SchemeManagerError struct {
Manager SchemeManagerIdentifier
Err error
}
func (sme SchemeManagerError) Error() string {
return fmt.Sprintf("Error parsing scheme manager %s: %s", sme.Manager.Name(), sme.Err.Error())
}
// NewConfiguration returns a new configuration. After this
// ParseFolder() should be called to parse the specified path.
func NewConfiguration(path string, assets string) (conf *Configuration, err error) {
......@@ -80,39 +91,74 @@ func (conf *Configuration) ParseFolder() error {
conf.SchemeManagers = make(map[SchemeManagerIdentifier]*SchemeManager)
conf.Issuers = make(map[IssuerIdentifier]*Issuer)
conf.CredentialTypes = make(map[CredentialTypeIdentifier]*CredentialType)
conf.publicKeys = make(map[IssuerIdentifier]map[int]*gabi.PublicKey)
conf.DisabledSchemeManagers = make(map[SchemeManagerIdentifier]*SchemeManager)
conf.publicKeys = make(map[IssuerIdentifier]map[int]*gabi.PublicKey)
conf.reverseHashes = make(map[string]CredentialTypeIdentifier)
var mgrerr *SchemeManagerError
err := iterateSubfolders(conf.path, func(dir string) error {
manager := &SchemeManager{}
if err := conf.ParseIndex(manager); err != nil {
return err
}
exists, err := conf.pathToDescription(manager, dir+"/description.xml", manager)
if err != nil || !exists {
return err
}
if manager.XMLVersion < 7 {
return errors.New("Unsupported scheme manager description")
}
valid, err := conf.VerifySignature(manager.Identifier())
if err != nil {
return err
}
if !valid {
return errors.New("Scheme manager signature was invalid")
err := conf.parseSchemeManagerFolder(dir)
if err == nil {
return nil // OK, do next scheme manager folder
}
// If there is an error, and it is of type SchemeManagerError, return nil
// so as to continue parsing other managers.
var ok bool
if mgrerr, ok = err.(*SchemeManagerError); ok {
return nil
}
conf.SchemeManagers[manager.Identifier()] = manager
return conf.parseIssuerFolders(manager, dir)
return err // Not a SchemeManagerError? return it & halt parsing now
})
if err != nil {
return err
}
conf.initialized = true
if mgrerr != nil {
return mgrerr
}
return nil
}
func (conf *Configuration) parseSchemeManagerFolder(dir string) (err error) {
exists, err := fs.PathExists(dir + "/description.xml")
if err != nil || !exists {
return err
}
// Put the directory name in the ID field in case we return early due to errors
manager := &SchemeManager{ID: filepath.Base(dir)}
defer func() {
if err != nil {
conf.DisabledSchemeManagers[manager.Identifier()] = manager
err = &SchemeManagerError{Manager: manager.Identifier(), Err: err}
_ = conf.RemoveSchemeManager(manager.Identifier(), false) // does not return errors
}
}()
if err = conf.parseIndex(filepath.Base(dir), manager); err != nil {
return err
}
_, err = conf.pathToDescription(manager, dir+"/description.xml", manager)
if err != nil || !exists {
return err
}
if manager.XMLVersion < 7 {
return errors.New("Unsupported scheme manager description")
}
valid, err := conf.VerifySignature(manager.Identifier())
if err != nil {
return err
}
if !valid {
return errors.New("Scheme manager signature was invalid")
}
conf.SchemeManagers[manager.Identifier()] = manager
err = conf.parseIssuerFolders(manager, dir)
return
}
func relativePath(absolute string, relative string) string {
return relative[len(absolute)+1:]
}
......@@ -339,7 +385,7 @@ func (conf *Configuration) DownloadSchemeManager(url string) (*SchemeManager, er
// RemoveSchemeManager removes the specified scheme manager and all associated issuers,
// public keys and credential types from this Configuration.
func (conf *Configuration) RemoveSchemeManager(id SchemeManagerIdentifier) error {
func (conf *Configuration) RemoveSchemeManager(id SchemeManagerIdentifier, fromStorage bool) error {
// Remove everything falling under the manager's responsibility
for credid := range conf.CredentialTypes {
if credid.IssuerIdentifier().SchemeManagerIdentifier() == id {
......@@ -357,9 +403,11 @@ func (conf *Configuration) RemoveSchemeManager(id SchemeManagerIdentifier) error
}
}
delete(conf.SchemeManagers, id)
// Remove from storage
return os.RemoveAll(fmt.Sprintf("%s/%s", conf.path, id.String()))
// or, remove above iterations and call .ParseFolder()?
if fromStorage {
return os.RemoveAll(fmt.Sprintf("%s/%s", conf.path, id.String()))
}
return nil
}
// AddSchemeManager adds the specified scheme manager to this Configuration,
......@@ -563,9 +611,9 @@ func (i SchemeManagerIndex) FromString(s string) error {
return nil
}
// ParseIndex parses the index file of the specified manager.
func (conf *Configuration) ParseIndex(manager *SchemeManager) error {
path := filepath.Join(conf.path, manager.ID, "index")
// parseIndex parses the index file of the specified manager.
func (conf *Configuration) parseIndex(name string, manager *SchemeManager) error {
path := filepath.Join(conf.path, name, "index")
if err := fs.AssertPathExists(path); err != nil {
return errors.New("Missing scheme manager index file")
}
......
......@@ -5,5 +5,5 @@
<string name="KeyshareKeypairs">[{&quot;privateKey&quot;:{&quot;lambda&quot;:13105831384828218876560609191189383845468459774975903717604163515386241495802150568081964987040584656142216443261218467199905843616264284055829505412960102329209002173148186420620500504858986845489948534342198615611818161542152957889040110812941118638951231633747249414646837250859544265493362941989058935616412420426887288399954686824856971402713552531155410782666248727292165743388787937137041599325971824628900100322779024857586721474036320187217412019204689610881581773125014731592865210590421717072349044304127053672666150142099179812051526213635630586112552985839971411737662299019137877699120171511254859730164,&quot;preCalculatedDenominator&quot;:14457175043970867415482864202144925492455189514261889829019837221373475922961532698087509388113348555917219818150888564425877887960039812301626028889905753439084324313884963867248924045095099875600061387168880466523954155339779490282034173927659447847503489301273075366512403194118684254876613087496838773003874146757417013864773712276484301281333085093670440601294131086228360118390208800171949963093232479261037074686763095365997465734818160576919422500361850265405516827193794151557746513679590064303202557683348550737040347000242465179752409243222947197749116418194597609990691197111528523135899412968516583651540},&quot;publicKey&quot;:{&quot;bits&quot;:2048,&quot;g&quot;:8862400561053796364289285723617693709207564671698972893812200927472011482035295371791426738073934848329302611254009067210559729810902663585454743512874760511368626382512193855688797707415822966598786461277217956206157765359954321269690961732537704558120157014666258193744608782162606605170876295968514024471141843787498493152932774279687347862057282945272215765332541474211830087002078271212103305702205788341726639534165102630283294218679557529017676396999598448180234664320818005422679066912462307632981889153339448429506228240657156076394029553819588111185770468406271931195208301167982327782614273877364721714452,&quot;n&quot;:26211662769656437753121218382378767690936919549951807435208327030772482991604301136163929974081169312284432886522436934399811687232528568111659010825920204658418004346296372841241001009717973690979897068684397231223636323084305915778080221625882237277902463267494498829293674501719088530986725883978117871233149085456111975665968312781373400475995717615211287938483521093329209078097893122125909937865512298951433144557040805559075433725322232688535699085082726523017873600524842344424677847217387575470418175712809701080214114825687537367951841103742141876774971583300722803037995253856843248026121191810752654274223,&quot;nSquared&quot;:687051265150193397388737817358354735135379425802161838393081206112180852406102336661977328151527128648923978763926029566847881395557111856108083268840036991848093085707643314278670899573615597557018701664652290094225326842794721518120098448299930012617134510178308002775842424437745795941590153105400326680047975875811954487334935179849168841000649942377984466861597973811131227952291501551344177628270089313938769943238235101730045101784480725891585983180996430688827273523156596705718421623185098892388555113844586624798206469811916847146153787351016427620772668531112567616601680420110669419300161427439750870446658944559518310012326431627406431000795002946018420635025636749454943511229471215249620266567874528383434474580509468753325765630060183187621977261956013577372439010654166096800514371315165138841327451799493798885006436386382563574252854758769432824547274991022772773828006940890171431402084684096553511231459009120400723388472707427084637869177106345365952491273341327831008562737754411280436203881971742872052502302361295444174230182249579289657685236067835020312586819531146275049884116649650194408736172295425155849973493156469880872191887812616518885817798547061730519474196414344767522035757131883766150882253729}},{&quot;privateKey&quot;:{&quot;lambda&quot;:6184562678528752436832164133724517995431954528494243017545500208614709651767377714257841240272720630359762916481185037603813113089603005910539770462609596751920347221069059975784159494591218550001024160513862718606573032998680237306637825698955423269983698373452564721617556472176888974747238372962166560567833010090783283721188389989840207700895671602581224918934678281299019936932720319707679785602244082105916618542821207646259753009399823471432247446390285302239068634383996988495890078585007302812815803503820187905484135946066391133081048259187375039757173695608214036865596366509171308574148200704309443764444,&quot;preCalculatedDenominator&quot;:3508628871837896788321309237803440469403117094910460515766494924999724519071930881339056474869035916234214465229551568332862196862718822303382740727624840200833947022860166041718986776724551892102489072337758081929573180080013954625914613005031361367111698086249519496273404229622162026090202929945849942880934660127600271409516420795724912767897223552791438362903310434967491401537026159986167469001871407547237981849744547292474794910841697822927754679818124348830555461024193016084711728120676214139902333529799071190420767988605828092412644423762072877030470209599099389367280815334114438378069068181181058736791},&quot;publicKey&quot;:{&quot;bits&quot;:2048,&quot;g&quot;:17767463921361790475850945292980865995244694782274600798889058583795448595655230498143301060554472153811191834580916447890535273201977466908601236575421197376061431343102813995580354991205876972725742105642561503947039149916280545883075499395400011378310529259383089175649963880461391018852256967958446507954986990641775442845408924114402473837987012378606297814034927688586777297474215574761420358612206306949782968177729624649508752129235873813995151659950110801680628985884778091328842752327266555079541007332946858463967181246818896616753694053118750508390518124287186980282171260678670643565737884142133288589401,&quot;n&quot;:24738250714115009747328656534898071981727818113976972070182000834458838607069510857031364961090882521439051665924740150415252452358412023642159081850438387007681388884276239903136637978364874200004096642055450874426292131994720949226551302795821693079934793493810258886470225888707555898988953491848666242271648010535263876690591371549184488285292852556108098831053527978343953516901065910077176311284006269611726703192096126019674012913721567460759964188566623332994691859022294190618205991695025767206922649752736913034517035271738376896936368149181012410794877117433051973100751732715850680205664609652609815182897,&quot;nSquared&quot;:611981048394411789723953421476186591657368245800249742964177783299044023934931312318209363119887594846270142110975561619889579465125478770329167364521552661288086851944334527163279902570126907655353897552949530794124306755920852822227231995239686092877904605802171681499531667168561357567906188391533682522788232235293791366572590318999881897615294278544337013827080331160473976235198377329447997236604195541220849972135512524975186344029683158152922443280323040459534037669949807801104726623840623446431521636219576592795456066162368515810186259357688010253221756253768239702790645617809312136608532141559952086293992485843555015680373737960019119996233405018158354285517204344155278771773875609002500622993066825638558032745648908015028177280986062730134423851791114197134874632127799901960254934852296501757346247901444214427309573353333305832305947576015980844106755930969830500694326327162385658584413941141105580111707185814694014255678459167853049859388198810341006124599479909199354188941922972516151208685042513959047394859264250891931562156900839282128434254591808713990424035399307841847608314031458201734146013479981075481175837621027322959784838064477702593822887882257219197124070665470650004125120857600979701561312609}},{&quot;privateKey&quot;:{&quot;lambda&quot;:6028452352425011549574554689599013957304376567620389108914889309228356380068768736448966207018145406730900090971639880691225550403987461474965370832235144360059862408691802022992076863036759202505119231885754235889782776029256321349414327482888097914099554837553709457886050735655494927090190765223160674355651062439996244049353775540339080670889141528244222884195409094547781615289755663286309917416217035663165531657176973219486023262309807433629786250843572701879934485104088125299145658970125343979170033308524357589807406620682949863271575020368877325335218820280128557493456704092938888335602385161423779096304,&quot;preCalculatedDenominator&quot;:3111015575808257214670518772849525204347870840158004578696072738298150482248965871739918934218250629792218371362177825593750743110954487007029304470087322461414783573597792822377377423880615389546120263865938012674278853168380322586873515694928469042276233644696817323724605476354007511642267958517478270526145703900692512897264401804623322219889957709078242891956994461492105106273132156096571227213889667952488051138257863582658418999333168957588828154879830515612381503660218818488614774284879432878376926141945314369836270073009299481905490109127401864665903144801039019000377686874436629209724202627596930080910},&quot;publicKey&quot;:{&quot;bits&quot;:2048,&quot;g&quot;:25203586278496337500506037071786988254712368567661125696011348877989440853448499869317337936318942695308886944041024556799277668205445062643855354256855520700517210407765865214248232179503855682691045593895406168112836809590100517023702607999489077052605922778848157674018090064708560658821231622355276053276937628353434808939614883997170419500565941916685408731330720822232008822225148820344504920517262362983268301619949286214234326975080326972806811587474074751841924523127220545356559404043441261683915720957116156670855991432763507861121251204729277534389509491952694073592082976983869193848169368886504777167543,&quot;n&quot;:24113809409700046198298218758396055829217506270481556435659557236913425520275074945795864828072581626923600363886559522764902201615949845899861483328940577440239449634767208091968307452147036810020476927543016943559131104117025285397657309931552391656398219350214837831544202942621979708360763060892642697422915751281710581081623369284366151700951012391659673733039515566976420407336974182888646229967918140018678743366854814391316663891385431677656987687495177684293959235462165870906774333308976445541972903603467802680013422533783174122094147196936065715636382935758285029139504968030589078315813054153083156003909,&quot;nSquared&quot;:581475804247338490488006599248054006626212612976047499356860085147863424328471353817888582048179247652829104006631784465561374923253921265898280459759713808221382918585343558683822468412955134269326608954404008740596489342584451051332963879525566466104631311795594116713746971595658702416152057761216038556229912985015420280677350587257225478435800892298669785494933249479568802951226727955368321803664357645478714252258863288660785400020670185081841142677355955562132095964404351725369088923591102195985188378900133311613738899080830313804105125349940281703868886788457933005100509719731353654310662356640505306354978715848703540364865193532698108383842705254353161156795087969766467669425373796885766152693869110040976302615013464052872815087804986693351139490163877481346915693528053014055280605567258803619880459875779172043771920215323112027680816016961399520435655139291392766279161805529108554823248369627250170542824840801418859756582748372368177568771136838253631221701741119818398556689379982174249981391710099750980453213732658428729858876372531883875959585650375352885213298810434291065509301991961092541282567050346631173852937324752665107296399544140064631759104304928530309602320212301715462344327108289140113623280281}}]</string>
<boolean name="launchedFromBrowser" value="false" />
<string name="keyshare">{&quot;test&quot;:{&quot;keyPair&quot;:{&quot;privateKey&quot;:{&quot;lambda&quot;:12214112870199665290166556555451340495138794790533984967474826561841734549247382320577621541124900832056180911717383006575684684255545258176922372415102323074166739282896689214839294170531488548059756434611327763007910269187483468329718308923481447857151377019647187366640382025011216709887043927923969429000009043691025735700620957989360200766120074560814438642487651452384431551993840116049346685321285785716966985200427756907404837132069368739277146792600578085694607772088567648223321660604893897374788877302677252247276379317622140094627977015392418514260317281875734732187418396525233216445864514276743417185848,&quot;preCalculatedDenominator&quot;:19912746068205519364851327179815201082238009565234331045064495080230734476194817479124641743750883796254209246954649623190126403707736555175678388568054172353853041132321654071614367658185715154859106748471838564244810007905965315523998739353754803887245565422499729346591647088945407013226930182535705057075784239580728927331869546685952864393885796413660031420857632579613800450229774588518338215899036306413114356802331906233164336727792565281154474230263297371124137775615041515224573003818467270459709845839627351863248461718283936177402786467332492170107114657485498105659804873302946202504386142981739540069310},&quot;publicKey&quot;:{&quot;bits&quot;:2048,&quot;g&quot;:17948470935821729188106091421709655906001732927602280604374877188502926412173732300250736064220436586121644432565867771993761974358949417374879427109114746839901074083831506941188486018803901725486624170545520797943374384178772090444259028702531962880614697282738685021298955994020851975625300141657255060207178035443078641230729905182801310741253760431199512540950387260880637093634480127770357299622052007681045829349269144636555636560022574641155735732745698662647396619247466755278755885560424714760594726764152680178405250922344992316157163182728147747687910564755889459196648180088397022867342119114131262716803,&quot;n&quot;:24428225740399330580333113110902680990277589581067969934949653123683469098494764641155243082249801664112361823434766013151369368511090516353844744830204646148333478565793378429678588341062977096119512869222655526015820538374966936659436617846962895714302754039294374733280764050022433419774087855847938858000332409285415750647466867279610626860664320265681649418469417127726923376741037448704723897078434301858791634189635797437813209386891133527791081093395862543868043852447762291145615589316942332322356214230772589251174590398678888311562947723531989408178115197127709706626583351333795141029721896901485453680319,&quot;nSquared&quot;:596738212823908422722684447852557873707091115290261109970619471214678688342663922610410225887969624669528632850269713940927164243946500395632609808709015431150143363018916552402305647705542105198182591241256704640058830256989985731530407093712739321579360275605383025599284152574935758439945013820180868488849586876077265724009673310418503195732728223826931331883694710955296016136427784335719332993384794598188249575083799908524468396099680094784562607747368568764227244378367311828084637807486262977349835646107424857193160577841257746953292275449202680334406981680553910026247464478737898189519886148000530227289008009559577110542216066310896228763339224181840338326046626159368526555117143093509692471618025882574619710623665103358362539924521797298689972262499613191997151181825621274686799114758647167482972918231380049134953711377395205821468850062066750831955543485615342319331993871223164126914743303237376899916098170292785384814958681609873987207017471155787970444329874030299436374891262395778674915034144917802416680050500567825951443996313677157331224391722261090993848466707100532265478585766510876455411260719566093960241080627471763474427127437884993041475493613536790376888114934702629672232540326858573261847941761}},&quot;nonce&quot;:&quot;Xb2E0rMzIlLzGRF72zpnIa3OQuQa+PtQf5+Lw6uXFTY\u003d&quot;,&quot;url&quot;:&quot;http://192.168.2.20:8080/irma_keyshare_server/api/v1&quot;,&quot;username&quot;:&quot;testusername&quot;}}</string>
<string name="keyshare">{&quot;test&quot;:{&quot;keyPair&quot;:{&quot;privateKey&quot;:{&quot;lambda&quot;:12214112870199665290166556555451340495138794790533984967474826561841734549247382320577621541124900832056180911717383006575684684255545258176922372415102323074166739282896689214839294170531488548059756434611327763007910269187483468329718308923481447857151377019647187366640382025011216709887043927923969429000009043691025735700620957989360200766120074560814438642487651452384431551993840116049346685321285785716966985200427756907404837132069368739277146792600578085694607772088567648223321660604893897374788877302677252247276379317622140094627977015392418514260317281875734732187418396525233216445864514276743417185848,&quot;preCalculatedDenominator&quot;:19912746068205519364851327179815201082238009565234331045064495080230734476194817479124641743750883796254209246954649623190126403707736555175678388568054172353853041132321654071614367658185715154859106748471838564244810007905965315523998739353754803887245565422499729346591647088945407013226930182535705057075784239580728927331869546685952864393885796413660031420857632579613800450229774588518338215899036306413114356802331906233164336727792565281154474230263297371124137775615041515224573003818467270459709845839627351863248461718283936177402786467332492170107114657485498105659804873302946202504386142981739540069310},&quot;publicKey&quot;:{&quot;bits&quot;:2048,&quot;g&quot;:17948470935821729188106091421709655906001732927602280604374877188502926412173732300250736064220436586121644432565867771993761974358949417374879427109114746839901074083831506941188486018803901725486624170545520797943374384178772090444259028702531962880614697282738685021298955994020851975625300141657255060207178035443078641230729905182801310741253760431199512540950387260880637093634480127770357299622052007681045829349269144636555636560022574641155735732745698662647396619247466755278755885560424714760594726764152680178405250922344992316157163182728147747687910564755889459196648180088397022867342119114131262716803,&quot;n&quot;:24428225740399330580333113110902680990277589581067969934949653123683469098494764641155243082249801664112361823434766013151369368511090516353844744830204646148333478565793378429678588341062977096119512869222655526015820538374966936659436617846962895714302754039294374733280764050022433419774087855847938858000332409285415750647466867279610626860664320265681649418469417127726923376741037448704723897078434301858791634189635797437813209386891133527791081093395862543868043852447762291145615589316942332322356214230772589251174590398678888311562947723531989408178115197127709706626583351333795141029721896901485453680319,&quot;nSquared&quot;:596738212823908422722684447852557873707091115290261109970619471214678688342663922610410225887969624669528632850269713940927164243946500395632609808709015431150143363018916552402305647705542105198182591241256704640058830256989985731530407093712739321579360275605383025599284152574935758439945013820180868488849586876077265724009673310418503195732728223826931331883694710955296016136427784335719332993384794598188249575083799908524468396099680094784562607747368568764227244378367311828084637807486262977349835646107424857193160577841257746953292275449202680334406981680553910026247464478737898189519886148000530227289008009559577110542216066310896228763339224181840338326046626159368526555117143093509692471618025882574619710623665103358362539924521797298689972262499613191997151181825621274686799114758647167482972918231380049134953711377395205821468850062066750831955543485615342319331993871223164126914743303237376899916098170292785384814958681609873987207017471155787970444329874030299436374891262395778674915034144917802416680050500567825951443996313677157331224391722261090993848466707100532265478585766510876455411260719566093960241080627471763474427127437884993041475493613536790376888114934702629672232540326858573261847941761}},&quot;nonce&quot;:&quot;Xb2E0rMzIlLzGRF72zpnIa3OQuQa+PtQf5+Lw6uXFTY\u003d&quot;,&quot;url&quot;:&quot;http://localhost:8080/irma_keyshare_server/api/v1&quot;,&quot;username&quot;:&quot;testusername&quot;}}</string>
</map>
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment