@mysten/sui
Version:
Sui TypeScript API
79 lines (60 loc) • 2.04 kB
Markdown
# ZkLogin
> Zero-knowledge authentication with OAuth providers on Sui
Utilities for working with zkLogin. Currently contains functionality to create and parse zkLogin
signatures and compute zkLogin addresses.
To parse a serialized zkLogin signature
```typescript
const parsedSignature = await parseZkLoginSignature('BQNNMTY4NjAxMzAyO....');
```
Use `getZkLoginSignature` to serialize a zkLogin signature.
```typescript
const serializedSignature = await getZkLoginSignature({ inputs, maxEpoch, userSignature });
```
To compute the address for a given address seed and iss you can use `computeZkLoginAddressFromSeed`
```typescript
const address = computeZkLoginAddressFromSeed(0n, 'https://accounts.google.com');
```
To compute an address from jwt:
```typescript
const address = jwtToAddress(jwtAsString, salt);
```
To compute an address from a parsed jwt:
```typescript
const address = computeZkLoginAddress({
claimName,
claimValue,
iss,
aud,
userSalt: BigInt(salt),
});
```
To use zkLogin inside a multisig, see the [Multisig Guide](../sui/cryptography/multisig) for more
details.
## Legacy addresses
When zklogin was first introduced, there was an inconsistency in how the address seed was computed.
For backwards compatibility reasons there are 2 valid addresses for a given set of inputs. Methods
that produce zklogin addresses all accept a `legacyAddress` boolean flag, either as their last
parameter, or in their options argument.
```typescript
computeZkLoginAddress,
computeZkLoginAddressFromSeed,
jwtToAddress,
toZkLoginPublicIdentifier,
genAddressSeed,
} from '@mysten/sui/zklogin';
const address = jwtToAddress(jwtAsString, salt, true);
const address = computeZkLoginAddressFromSeed(0n, 'https://accounts.google.com', true);
const address = computeZkLoginAddress({
claimName,
claimValue,
iss,
aud,
userSalt: BigInt(salt),
legacyAddress: true,
});
const address = toZkLoginPublicIdentifier(
genAddressSeed(userSalt, claimName, claimValue, aud),
iss,
{ legacyAddress: true },
).toSuiAddress();
```