Skip to content

Commit 3914b42

Browse files
Change the way keys are written down in keystore.json. (#4534)
## Motivation Currently, the `keystore.json` encode the key as a vector of decimal values. Fixes #4489 ## Proposal We simply change the ways that the encoding is done. We go from ``` { "keys": [ [ "0x39b7028692e9a61d2e2ad945bf8e83f25cdfc3cbec6470db6f1ad6fbaa1600ca", [ 128, 67, 34, 67, ..... ] ], ``` to ``` { "keys": [ [ "0x39b7028692e9a61d2e2ad945bf8e83f25cdfc3cbec6470db6f1ad6fbaa1600ca", "7b2245643235353139223a2261326332363133343864366266663965303362376633303638643031616563656363326538343864343661316335353761353030653264376530333264326365227d" ], ``` ## Test Plan The CI. The remote end-to-end test will test this feature. ## Release Plan This definitely breaks the existing wallets. ## Links None.
1 parent a567ac8 commit 3914b42

File tree

1 file changed

+20
-21
lines changed

1 file changed

+20
-21
lines changed

linera-base/src/crypto/signer.rs

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,13 @@ mod in_mem {
126126
}
127127
}
128128

129+
#[derive(Debug, Deserialize, Serialize)]
130+
struct Inner {
131+
keys: Vec<(AccountOwner, String)>,
132+
#[cfg(with_getrandom)]
133+
prng_seed: Option<u64>,
134+
}
135+
129136
/// In-memory signer.
130137
struct InMemSignerInner {
131138
keys: BTreeMap<AccountOwner, AccountSecretKey>,
@@ -175,10 +182,8 @@ mod in_mem {
175182
self.keys
176183
.iter()
177184
.map(|(owner, secret)| {
178-
(
179-
*owner,
180-
serde_json::to_vec(secret).expect("serialization should not fail"),
181-
)
185+
let bytes = serde_json::to_vec(secret).expect("serialization should not fail");
186+
(*owner, bytes)
182187
})
183188
.collect()
184189
}
@@ -256,18 +261,17 @@ mod in_mem {
256261
where
257262
S: serde::Serializer,
258263
{
259-
#[derive(Serialize, Debug)]
260-
struct Inner<'a> {
261-
keys: &'a Vec<(AccountOwner, Vec<u8>)>,
262-
#[cfg(with_getrandom)]
263-
prng_seed: Option<u64>,
264-
}
265-
266264
#[cfg(with_getrandom)]
267265
let prng_seed = self.rng_state.testing_seed;
268266

267+
let keys_as_strings = self
268+
.keys()
269+
.into_iter()
270+
.map(|(owner, bytes)| (owner, hex::encode(bytes)))
271+
.collect::<Vec<_>>();
272+
269273
let inner = Inner {
270-
keys: &self.keys(),
274+
keys: keys_as_strings,
271275
#[cfg(with_getrandom)]
272276
prng_seed,
273277
};
@@ -281,21 +285,16 @@ mod in_mem {
281285
where
282286
D: serde::Deserializer<'de>,
283287
{
284-
#[derive(Deserialize)]
285-
struct Inner {
286-
keys: Vec<(AccountOwner, Vec<u8>)>,
287-
#[cfg(with_getrandom)]
288-
prng_seed: Option<u64>,
289-
}
290-
291288
let inner = Inner::deserialize(deserializer)?;
292289

293290
let keys = inner
294291
.keys
295292
.into_iter()
296-
.map(|(owner, secret)| {
293+
.map(|(owner, secret_hex)| {
294+
let secret_bytes =
295+
hex::decode(&secret_hex).map_err(serde::de::Error::custom)?;
297296
let secret =
298-
serde_json::from_slice(&secret).map_err(serde::de::Error::custom)?;
297+
serde_json::from_slice(&secret_bytes).map_err(serde::de::Error::custom)?;
299298
Ok((owner, secret))
300299
})
301300
.collect::<Result<BTreeMap<_, _>, _>>()?;

0 commit comments

Comments
 (0)