@expo/app-integrity 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/build.gradle +2 -2
- package/android/src/main/java/expo/modules/integrity/IntegrityModule.kt +2 -2
- package/build/AppIntegrity.d.ts +40 -3
- package/build/AppIntegrity.d.ts.map +1 -1
- package/build/AppIntegrity.js +47 -10
- package/build/AppIntegrity.js.map +1 -1
- package/build/ExpoAppIntegrity.types.d.ts +7 -3
- package/build/ExpoAppIntegrity.types.d.ts.map +1 -1
- package/build/ExpoAppIntegrity.types.js.map +1 -1
- package/expo-module.config.json +1 -1
- package/ios/IntegrityModule.swift +4 -0
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.2/expo.modules.integrity-0.1.2-sources.jar +0 -0
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.2/expo.modules.integrity-0.1.2-sources.jar.md5 +1 -0
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.2/expo.modules.integrity-0.1.2-sources.jar.sha1 +1 -0
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.2/expo.modules.integrity-0.1.2-sources.jar.sha256 +1 -0
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.2/expo.modules.integrity-0.1.2-sources.jar.sha512 +1 -0
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.2/expo.modules.integrity-0.1.2.aar +0 -0
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.2/expo.modules.integrity-0.1.2.aar.md5 +1 -0
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.2/expo.modules.integrity-0.1.2.aar.sha1 +1 -0
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.2/expo.modules.integrity-0.1.2.aar.sha256 +1 -0
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.2/expo.modules.integrity-0.1.2.aar.sha512 +1 -0
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/{0.1.0/expo.modules.integrity-0.1.0.module → 0.1.2/expo.modules.integrity-0.1.2.module} +22 -22
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.2/expo.modules.integrity-0.1.2.module.md5 +1 -0
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.2/expo.modules.integrity-0.1.2.module.sha1 +1 -0
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.2/expo.modules.integrity-0.1.2.module.sha256 +1 -0
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.2/expo.modules.integrity-0.1.2.module.sha512 +1 -0
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/{0.1.0/expo.modules.integrity-0.1.0.pom → 0.1.2/expo.modules.integrity-0.1.2.pom} +1 -1
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.2/expo.modules.integrity-0.1.2.pom.md5 +1 -0
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.2/expo.modules.integrity-0.1.2.pom.sha1 +1 -0
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.2/expo.modules.integrity-0.1.2.pom.sha256 +1 -0
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.2/expo.modules.integrity-0.1.2.pom.sha512 +1 -0
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/maven-metadata.xml +4 -4
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/maven-metadata.xml.md5 +1 -1
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/maven-metadata.xml.sha1 +1 -1
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/maven-metadata.xml.sha256 +1 -1
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/maven-metadata.xml.sha512 +1 -1
- package/package.json +3 -3
- package/src/AppIntegrity.ts +48 -10
- package/src/ExpoAppIntegrity.types.ts +7 -3
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.0/expo.modules.integrity-0.1.0-sources.jar +0 -0
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.0/expo.modules.integrity-0.1.0-sources.jar.md5 +0 -1
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.0/expo.modules.integrity-0.1.0-sources.jar.sha1 +0 -1
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.0/expo.modules.integrity-0.1.0-sources.jar.sha256 +0 -1
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.0/expo.modules.integrity-0.1.0-sources.jar.sha512 +0 -1
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.0/expo.modules.integrity-0.1.0.aar +0 -0
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.0/expo.modules.integrity-0.1.0.aar.md5 +0 -1
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.0/expo.modules.integrity-0.1.0.aar.sha1 +0 -1
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.0/expo.modules.integrity-0.1.0.aar.sha256 +0 -1
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.0/expo.modules.integrity-0.1.0.aar.sha512 +0 -1
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.0/expo.modules.integrity-0.1.0.module.md5 +0 -1
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.0/expo.modules.integrity-0.1.0.module.sha1 +0 -1
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.0/expo.modules.integrity-0.1.0.module.sha256 +0 -1
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.0/expo.modules.integrity-0.1.0.module.sha512 +0 -1
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.0/expo.modules.integrity-0.1.0.pom.md5 +0 -1
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.0/expo.modules.integrity-0.1.0.pom.sha1 +0 -1
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.0/expo.modules.integrity-0.1.0.pom.sha256 +0 -1
- package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.0/expo.modules.integrity-0.1.0.pom.sha512 +0 -1
package/android/build.gradle
CHANGED
|
@@ -53,12 +53,12 @@ class IntegrityModule : Module() {
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
AsyncFunction(REQUEST_INTEGRITY_CHECK_METHOD_NAME) {
|
|
56
|
+
AsyncFunction(REQUEST_INTEGRITY_CHECK_METHOD_NAME) { requestHash: String, promise: Promise ->
|
|
57
57
|
integrityTokenProvider?.let {
|
|
58
58
|
val integrityTokenResponse: Task<StandardIntegrityToken> =
|
|
59
59
|
it.request(
|
|
60
60
|
StandardIntegrityTokenRequest.builder()
|
|
61
|
-
.setRequestHash(
|
|
61
|
+
.setRequestHash(requestHash)
|
|
62
62
|
.build()
|
|
63
63
|
)
|
|
64
64
|
integrityTokenResponse
|
package/build/AppIntegrity.d.ts
CHANGED
|
@@ -1,6 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A boolean value that indicates whether a particular device provides the [App Attest](https://developer.apple.com/documentation/devicecheck/establishing-your-app-s-integrity) service.
|
|
3
|
+
* Not all device types support the App Attest service, so check for support before using the service.
|
|
4
|
+
* @platform ios
|
|
5
|
+
*/
|
|
6
|
+
export declare const isSupported: boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Creates a new cryptographic key for use with the App Attest service.
|
|
9
|
+
* @return A Promise that is fulfilled with a string that contains the key identifier. The key itself is stored securely in the Secure Enclave.
|
|
10
|
+
* @platform ios
|
|
11
|
+
*/
|
|
1
12
|
export declare function generateKey(): Promise<string>;
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Asks Apple to attest to the validity of a generated cryptographic key.
|
|
15
|
+
* @param keyId The identifier you received by calling the `generateKey` function.
|
|
16
|
+
* @param challenge A challenge string from your server.
|
|
17
|
+
* @return A Promise that is fulfilled with a string that contains the attestation data. A statement from Apple about the validity of the key associated with keyId. Send this to your server for processing.
|
|
18
|
+
* @platform ios
|
|
19
|
+
*/
|
|
20
|
+
export declare function attestKey(keyId: string, challenge: string): Promise<string>;
|
|
21
|
+
/**
|
|
22
|
+
* Creates a block of data that demonstrates the legitimacy of an instance of your app running on a device.
|
|
23
|
+
* @param keyId The identifier you received by calling the `generateKey` function.
|
|
24
|
+
* @param challenge A string to be signed with the attested private key.
|
|
25
|
+
* @return A Promise that is fulfilled with a string that contains the assertion object. A data structure that you send to your server for processing.
|
|
26
|
+
* @platform ios
|
|
27
|
+
*/
|
|
28
|
+
export declare function generateAssertion(keyId: string, challenge: string): Promise<string>;
|
|
29
|
+
/**
|
|
30
|
+
* Prepares the integrity token provider for the given cloud project number.
|
|
31
|
+
* @param cloudProjectNumber The cloud project number.
|
|
32
|
+
* @return A Promise that is fulfilled if the integrity token provider is prepared successfully.
|
|
33
|
+
* @platform android
|
|
34
|
+
*/
|
|
5
35
|
export declare function prepareIntegrityTokenProvider(cloudProjectNumber: string): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Requests an integrity verdict for the given request hash from Google Play.
|
|
38
|
+
* @param requestHash A string representing the request hash.
|
|
39
|
+
* @return A Promise that is fulfilled with a string that contains the integrity check result.
|
|
40
|
+
* @platform android
|
|
41
|
+
*/
|
|
42
|
+
export declare function requestIntegrityCheck(requestHash: string): Promise<string>;
|
|
6
43
|
//# sourceMappingURL=AppIntegrity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppIntegrity.d.ts","sourceRoot":"","sources":["../src/AppIntegrity.ts"],"names":[],"mappings":"AAIA,wBAAsB,WAAW,oBAKhC;AAED,wBAAsB,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"AppIntegrity.d.ts","sourceRoot":"","sources":["../src/AppIntegrity.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,WAAW,SAA8D,CAAC;AAEvF;;;;GAIG;AACH,wBAAsB,WAAW,oBAKhC;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,mBAK/D;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,mBAKvE;AAED;;;;;GAKG;AACH,wBAAsB,6BAA6B,CAAC,kBAAkB,EAAE,MAAM,iBAK7E;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,mBAK9D"}
|
package/build/AppIntegrity.js
CHANGED
|
@@ -1,33 +1,70 @@
|
|
|
1
1
|
import { Platform } from 'react-native';
|
|
2
2
|
import ExpoAppIntegrity from './ExpoAppIntegrity';
|
|
3
|
+
/**
|
|
4
|
+
* A boolean value that indicates whether a particular device provides the [App Attest](https://developer.apple.com/documentation/devicecheck/establishing-your-app-s-integrity) service.
|
|
5
|
+
* Not all device types support the App Attest service, so check for support before using the service.
|
|
6
|
+
* @platform ios
|
|
7
|
+
*/
|
|
8
|
+
export const isSupported = Platform.OS === 'ios' ? ExpoAppIntegrity.isSupported : true;
|
|
9
|
+
/**
|
|
10
|
+
* Creates a new cryptographic key for use with the App Attest service.
|
|
11
|
+
* @return A Promise that is fulfilled with a string that contains the key identifier. The key itself is stored securely in the Secure Enclave.
|
|
12
|
+
* @platform ios
|
|
13
|
+
*/
|
|
3
14
|
export async function generateKey() {
|
|
4
15
|
if (Platform.OS !== 'ios') {
|
|
5
16
|
throw new Error('generateAssertion is only available on iOS');
|
|
6
17
|
}
|
|
7
18
|
return ExpoAppIntegrity.generateKey();
|
|
8
19
|
}
|
|
9
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Asks Apple to attest to the validity of a generated cryptographic key.
|
|
22
|
+
* @param keyId The identifier you received by calling the `generateKey` function.
|
|
23
|
+
* @param challenge A challenge string from your server.
|
|
24
|
+
* @return A Promise that is fulfilled with a string that contains the attestation data. A statement from Apple about the validity of the key associated with keyId. Send this to your server for processing.
|
|
25
|
+
* @platform ios
|
|
26
|
+
*/
|
|
27
|
+
export async function attestKey(keyId, challenge) {
|
|
10
28
|
if (Platform.OS !== 'ios') {
|
|
11
29
|
throw new Error('generateAssertion is only available on iOS');
|
|
12
30
|
}
|
|
13
|
-
return ExpoAppIntegrity.attestKey(
|
|
31
|
+
return ExpoAppIntegrity.attestKey(keyId, challenge);
|
|
14
32
|
}
|
|
15
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Creates a block of data that demonstrates the legitimacy of an instance of your app running on a device.
|
|
35
|
+
* @param keyId The identifier you received by calling the `generateKey` function.
|
|
36
|
+
* @param challenge A string to be signed with the attested private key.
|
|
37
|
+
* @return A Promise that is fulfilled with a string that contains the assertion object. A data structure that you send to your server for processing.
|
|
38
|
+
* @platform ios
|
|
39
|
+
*/
|
|
40
|
+
export async function generateAssertion(keyId, challenge) {
|
|
16
41
|
if (Platform.OS !== 'ios') {
|
|
17
42
|
throw new Error('generateAssertion is only available on iOS');
|
|
18
43
|
}
|
|
19
|
-
return ExpoAppIntegrity.generateAssertion(
|
|
20
|
-
}
|
|
21
|
-
export async function requestIntegrityCheck(challenge) {
|
|
22
|
-
if (Platform.OS !== 'android') {
|
|
23
|
-
throw new Error('requestIntegrityCheck is only available on Android');
|
|
24
|
-
}
|
|
25
|
-
return ExpoAppIntegrity.requestIntegrityCheck(challenge);
|
|
44
|
+
return ExpoAppIntegrity.generateAssertion(keyId, challenge);
|
|
26
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Prepares the integrity token provider for the given cloud project number.
|
|
48
|
+
* @param cloudProjectNumber The cloud project number.
|
|
49
|
+
* @return A Promise that is fulfilled if the integrity token provider is prepared successfully.
|
|
50
|
+
* @platform android
|
|
51
|
+
*/
|
|
27
52
|
export async function prepareIntegrityTokenProvider(cloudProjectNumber) {
|
|
28
53
|
if (Platform.OS !== 'android') {
|
|
29
54
|
throw new Error('prepareIntegrityTokenProvider is only available on Android');
|
|
30
55
|
}
|
|
31
56
|
return ExpoAppIntegrity.prepareIntegrityTokenProvider(cloudProjectNumber);
|
|
32
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Requests an integrity verdict for the given request hash from Google Play.
|
|
60
|
+
* @param requestHash A string representing the request hash.
|
|
61
|
+
* @return A Promise that is fulfilled with a string that contains the integrity check result.
|
|
62
|
+
* @platform android
|
|
63
|
+
*/
|
|
64
|
+
export async function requestIntegrityCheck(requestHash) {
|
|
65
|
+
if (Platform.OS !== 'android') {
|
|
66
|
+
throw new Error('requestIntegrityCheck is only available on Android');
|
|
67
|
+
}
|
|
68
|
+
return ExpoAppIntegrity.requestIntegrityCheck(requestHash);
|
|
69
|
+
}
|
|
33
70
|
//# sourceMappingURL=AppIntegrity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppIntegrity.js","sourceRoot":"","sources":["../src/AppIntegrity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,gBAAgB,CAAC,WAAW,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"AppIntegrity.js","sourceRoot":"","sources":["../src/AppIntegrity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAElD;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;AAEvF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,gBAAgB,CAAC,WAAW,EAAE,CAAC;AACxC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAa,EAAE,SAAiB;IAC9D,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,gBAAgB,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAa,EAAE,SAAiB;IACtE,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,gBAAgB,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,kBAA0B;IAC5E,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,gBAAgB,CAAC,6BAA6B,CAAC,kBAAkB,CAAC,CAAC;AAC5E,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,WAAmB;IAC7D,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,gBAAgB,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;AAC7D,CAAC","sourcesContent":["import { Platform } from 'react-native';\n\nimport ExpoAppIntegrity from './ExpoAppIntegrity';\n\n/**\n * A boolean value that indicates whether a particular device provides the [App Attest](https://developer.apple.com/documentation/devicecheck/establishing-your-app-s-integrity) service.\n * Not all device types support the App Attest service, so check for support before using the service.\n * @platform ios\n */\nexport const isSupported = Platform.OS === 'ios' ? ExpoAppIntegrity.isSupported : true;\n\n/**\n * Creates a new cryptographic key for use with the App Attest service.\n * @return A Promise that is fulfilled with a string that contains the key identifier. The key itself is stored securely in the Secure Enclave.\n * @platform ios\n */\nexport async function generateKey() {\n if (Platform.OS !== 'ios') {\n throw new Error('generateAssertion is only available on iOS');\n }\n return ExpoAppIntegrity.generateKey();\n}\n\n/**\n * Asks Apple to attest to the validity of a generated cryptographic key.\n * @param keyId The identifier you received by calling the `generateKey` function.\n * @param challenge A challenge string from your server.\n * @return A Promise that is fulfilled with a string that contains the attestation data. A statement from Apple about the validity of the key associated with keyId. Send this to your server for processing.\n * @platform ios\n */\nexport async function attestKey(keyId: string, challenge: string) {\n if (Platform.OS !== 'ios') {\n throw new Error('generateAssertion is only available on iOS');\n }\n return ExpoAppIntegrity.attestKey(keyId, challenge);\n}\n\n/**\n * Creates a block of data that demonstrates the legitimacy of an instance of your app running on a device.\n * @param keyId The identifier you received by calling the `generateKey` function.\n * @param challenge A string to be signed with the attested private key.\n * @return A Promise that is fulfilled with a string that contains the assertion object. A data structure that you send to your server for processing.\n * @platform ios\n */\nexport async function generateAssertion(keyId: string, challenge: string) {\n if (Platform.OS !== 'ios') {\n throw new Error('generateAssertion is only available on iOS');\n }\n return ExpoAppIntegrity.generateAssertion(keyId, challenge);\n}\n\n/**\n * Prepares the integrity token provider for the given cloud project number.\n * @param cloudProjectNumber The cloud project number.\n * @return A Promise that is fulfilled if the integrity token provider is prepared successfully.\n * @platform android\n */\nexport async function prepareIntegrityTokenProvider(cloudProjectNumber: string) {\n if (Platform.OS !== 'android') {\n throw new Error('prepareIntegrityTokenProvider is only available on Android');\n }\n return ExpoAppIntegrity.prepareIntegrityTokenProvider(cloudProjectNumber);\n}\n\n/**\n * Requests an integrity verdict for the given request hash from Google Play.\n * @param requestHash A string representing the request hash.\n * @return A Promise that is fulfilled with a string that contains the integrity check result.\n * @platform android\n */\nexport async function requestIntegrityCheck(requestHash: string) {\n if (Platform.OS !== 'android') {\n throw new Error('requestIntegrityCheck is only available on Android');\n }\n return ExpoAppIntegrity.requestIntegrityCheck(requestHash);\n}\n"]}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { NativeModule } from 'expo-modules-core/types';
|
|
2
|
+
/**
|
|
3
|
+
* @hidden
|
|
4
|
+
*/
|
|
2
5
|
export interface ExpoAppIntegrityModule extends NativeModule {
|
|
6
|
+
isSupported: boolean;
|
|
3
7
|
generateKey(): Promise<string>;
|
|
4
|
-
attestKey(
|
|
5
|
-
generateAssertion(
|
|
8
|
+
attestKey(keyId: string, challenge: string): Promise<string>;
|
|
9
|
+
generateAssertion(keyId: string, challenge: string): Promise<string>;
|
|
6
10
|
prepareIntegrityTokenProvider(cloudProjectNumber: string): Promise<void>;
|
|
7
|
-
requestIntegrityCheck(
|
|
11
|
+
requestIntegrityCheck(requestHash: string): Promise<string>;
|
|
8
12
|
}
|
|
9
13
|
//# sourceMappingURL=ExpoAppIntegrity.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpoAppIntegrity.types.d.ts","sourceRoot":"","sources":["../src/ExpoAppIntegrity.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,WAAW,sBAAuB,SAAQ,YAAY;IAE1D,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"ExpoAppIntegrity.types.d.ts","sourceRoot":"","sources":["../src/ExpoAppIntegrity.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,YAAY;IAE1D,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7D,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAErE,6BAA6B,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpoAppIntegrity.types.js","sourceRoot":"","sources":["../src/ExpoAppIntegrity.types.ts"],"names":[],"mappings":"","sourcesContent":["import { NativeModule } from 'expo-modules-core/types';\n\nexport interface ExpoAppIntegrityModule extends NativeModule {\n // iOS\n generateKey(): Promise<string>;\n attestKey(
|
|
1
|
+
{"version":3,"file":"ExpoAppIntegrity.types.js","sourceRoot":"","sources":["../src/ExpoAppIntegrity.types.ts"],"names":[],"mappings":"","sourcesContent":["import { NativeModule } from 'expo-modules-core/types';\n\n/**\n * @hidden\n */\nexport interface ExpoAppIntegrityModule extends NativeModule {\n // iOS\n isSupported: boolean;\n generateKey(): Promise<string>;\n attestKey(keyId: string, challenge: string): Promise<string>;\n generateAssertion(keyId: string, challenge: string): Promise<string>;\n // Android\n prepareIntegrityTokenProvider(cloudProjectNumber: string): Promise<void>;\n requestIntegrityCheck(requestHash: string): Promise<string>;\n}\n"]}
|
package/expo-module.config.json
CHANGED
|
@@ -8,6 +8,10 @@ public class IntegrityModule: Module {
|
|
|
8
8
|
public func definition() -> ModuleDefinition {
|
|
9
9
|
Name("ExpoAppIntegrity")
|
|
10
10
|
|
|
11
|
+
Constant("isSupported") {
|
|
12
|
+
return service.isSupported
|
|
13
|
+
}
|
|
14
|
+
|
|
11
15
|
AsyncFunction("generateKey") {
|
|
12
16
|
do {
|
|
13
17
|
return try await service.generateKey()
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
594e9d7dac41e6c828b54d0afaf12267
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
41cda41cb0b43ddb0bea3c5b5b283490346a62dc
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
9b7e44c18df40296e89ec111fd1093841c27a50d2dd6f9d8db9a0a7bf810eef7
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
e7f267cc0787ef413c398cffe83b2370eeb304fa1f19dca189e903c71b1946926f9814b0aef36ff36d7c82436e95c5e26230c47a97fc2bf79b4b5146978fe663
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
8c5ac39271246962bad5f8914a5dd623
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
537f4596016d0dece7c479a9e82381f6eb1206e5
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1504a67967a5a7f458821dbcfad526e06811d23790072fb3ab6b10b8256ca95f
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1519441c49908bc66e3d6bc49813423baf462f5bd7dc8bc36fb7d7858cf458d38b09fb079984e045779ef12b0c0f49ac18decbf2c707b901d1395c6885e6547e
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"component": {
|
|
4
4
|
"group": "expo.modules.integrity",
|
|
5
5
|
"module": "expo.modules.integrity",
|
|
6
|
-
"version": "0.1.
|
|
6
|
+
"version": "0.1.2",
|
|
7
7
|
"attributes": {
|
|
8
8
|
"org.gradle.status": "release"
|
|
9
9
|
}
|
|
@@ -24,13 +24,13 @@
|
|
|
24
24
|
},
|
|
25
25
|
"files": [
|
|
26
26
|
{
|
|
27
|
-
"name": "expo.modules.integrity-0.1.
|
|
28
|
-
"url": "expo.modules.integrity-0.1.
|
|
29
|
-
"size":
|
|
30
|
-
"sha512": "
|
|
31
|
-
"sha256": "
|
|
32
|
-
"sha1": "
|
|
33
|
-
"md5": "
|
|
27
|
+
"name": "expo.modules.integrity-0.1.2.aar",
|
|
28
|
+
"url": "expo.modules.integrity-0.1.2.aar",
|
|
29
|
+
"size": 20819,
|
|
30
|
+
"sha512": "1519441c49908bc66e3d6bc49813423baf462f5bd7dc8bc36fb7d7858cf458d38b09fb079984e045779ef12b0c0f49ac18decbf2c707b901d1395c6885e6547e",
|
|
31
|
+
"sha256": "1504a67967a5a7f458821dbcfad526e06811d23790072fb3ab6b10b8256ca95f",
|
|
32
|
+
"sha1": "537f4596016d0dece7c479a9e82381f6eb1206e5",
|
|
33
|
+
"md5": "8c5ac39271246962bad5f8914a5dd623"
|
|
34
34
|
}
|
|
35
35
|
]
|
|
36
36
|
},
|
|
@@ -60,13 +60,13 @@
|
|
|
60
60
|
],
|
|
61
61
|
"files": [
|
|
62
62
|
{
|
|
63
|
-
"name": "expo.modules.integrity-0.1.
|
|
64
|
-
"url": "expo.modules.integrity-0.1.
|
|
65
|
-
"size":
|
|
66
|
-
"sha512": "
|
|
67
|
-
"sha256": "
|
|
68
|
-
"sha1": "
|
|
69
|
-
"md5": "
|
|
63
|
+
"name": "expo.modules.integrity-0.1.2.aar",
|
|
64
|
+
"url": "expo.modules.integrity-0.1.2.aar",
|
|
65
|
+
"size": 20819,
|
|
66
|
+
"sha512": "1519441c49908bc66e3d6bc49813423baf462f5bd7dc8bc36fb7d7858cf458d38b09fb079984e045779ef12b0c0f49ac18decbf2c707b901d1395c6885e6547e",
|
|
67
|
+
"sha256": "1504a67967a5a7f458821dbcfad526e06811d23790072fb3ab6b10b8256ca95f",
|
|
68
|
+
"sha1": "537f4596016d0dece7c479a9e82381f6eb1206e5",
|
|
69
|
+
"md5": "8c5ac39271246962bad5f8914a5dd623"
|
|
70
70
|
}
|
|
71
71
|
]
|
|
72
72
|
},
|
|
@@ -80,13 +80,13 @@
|
|
|
80
80
|
},
|
|
81
81
|
"files": [
|
|
82
82
|
{
|
|
83
|
-
"name": "expo.modules.integrity-0.1.
|
|
84
|
-
"url": "expo.modules.integrity-0.1.
|
|
85
|
-
"size":
|
|
86
|
-
"sha512": "
|
|
87
|
-
"sha256": "
|
|
88
|
-
"sha1": "
|
|
89
|
-
"md5": "
|
|
83
|
+
"name": "expo.modules.integrity-0.1.2-sources.jar",
|
|
84
|
+
"url": "expo.modules.integrity-0.1.2-sources.jar",
|
|
85
|
+
"size": 3403,
|
|
86
|
+
"sha512": "e7f267cc0787ef413c398cffe83b2370eeb304fa1f19dca189e903c71b1946926f9814b0aef36ff36d7c82436e95c5e26230c47a97fc2bf79b4b5146978fe663",
|
|
87
|
+
"sha256": "9b7e44c18df40296e89ec111fd1093841c27a50d2dd6f9d8db9a0a7bf810eef7",
|
|
88
|
+
"sha1": "41cda41cb0b43ddb0bea3c5b5b283490346a62dc",
|
|
89
|
+
"md5": "594e9d7dac41e6c828b54d0afaf12267"
|
|
90
90
|
}
|
|
91
91
|
]
|
|
92
92
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
379ea02255e27a052cf49365702c13cf
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
47e8f6e9fb0f7f8c4b2a55195418dbf1e984224c
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
473f7ae7ff509e236a03e64ddee712dc77c0bba7c8f314106012292e5300d558
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0e5836287c39a17e6d90a83adedd628726622d5d1984c0ac1a546ccf2c2197208338f92eb4726d561f800bbd66a8163154f06b5fbea581db0905d33fb9d5a0e3
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<modelVersion>4.0.0</modelVersion>
|
|
10
10
|
<groupId>expo.modules.integrity</groupId>
|
|
11
11
|
<artifactId>expo.modules.integrity</artifactId>
|
|
12
|
-
<version>0.1.
|
|
12
|
+
<version>0.1.2</version>
|
|
13
13
|
<packaging>aar</packaging>
|
|
14
14
|
<name>expo.modules.integrity</name>
|
|
15
15
|
<url>https://github.com/expo/expo</url>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
d088605b874426e82428e0fbd8fc34e2
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
97ac5ab418cc60589dde018500b32bbdf65eca84
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0645ccfa5cfa6e306cee05b6cb1b1249b545a9d95f69417b1f7e3812622d6f9f
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
c43e6bf04df6ffdd6d9c637554de9b67b778c5eef2867dd3573c76780faf8d91f04412144c5bc8bbad139339898f90a127687dc2b5df5f169fce30ff546e516a
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
<groupId>expo.modules.integrity</groupId>
|
|
4
4
|
<artifactId>expo.modules.integrity</artifactId>
|
|
5
5
|
<versioning>
|
|
6
|
-
<latest>0.1.
|
|
7
|
-
<release>0.1.
|
|
6
|
+
<latest>0.1.2</latest>
|
|
7
|
+
<release>0.1.2</release>
|
|
8
8
|
<versions>
|
|
9
|
-
<version>0.1.
|
|
9
|
+
<version>0.1.2</version>
|
|
10
10
|
</versions>
|
|
11
|
-
<lastUpdated>
|
|
11
|
+
<lastUpdated>20250819175536</lastUpdated>
|
|
12
12
|
</versioning>
|
|
13
13
|
</metadata>
|
package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/maven-metadata.xml.md5
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
6db082eb702945d99e226d76ba8b6f79
|
package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/maven-metadata.xml.sha1
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
0e59fa62d40861c2dd1e0355f9f534316bb3545d
|
package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/maven-metadata.xml.sha256
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
4d7cbe68358eb4dffbdd6faffdd67b6349681dab15a5192714dd749a05ade927
|
package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/maven-metadata.xml.sha512
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
0647cb702e70b42befaf5f1c97b9c2c4793576fd191ec4f6907652a06b533c39e608d6016134c8bb8480220e86fe0d07ed9f31806e58982c2eebc679cbe26473
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/app-integrity",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "A native module that helps assert app integrity on mobile platforms",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "build/index.js",
|
|
@@ -37,11 +37,11 @@
|
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"expo-module-scripts": "^5.0.
|
|
40
|
+
"expo-module-scripts": "^5.0.2"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|
|
43
43
|
"expo": "*",
|
|
44
44
|
"react-native": "*"
|
|
45
45
|
},
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "de2ce610a804a8f3ddcee6ea9474543e81b903bd"
|
|
47
47
|
}
|
package/src/AppIntegrity.ts
CHANGED
|
@@ -2,6 +2,18 @@ import { Platform } from 'react-native';
|
|
|
2
2
|
|
|
3
3
|
import ExpoAppIntegrity from './ExpoAppIntegrity';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* A boolean value that indicates whether a particular device provides the [App Attest](https://developer.apple.com/documentation/devicecheck/establishing-your-app-s-integrity) service.
|
|
7
|
+
* Not all device types support the App Attest service, so check for support before using the service.
|
|
8
|
+
* @platform ios
|
|
9
|
+
*/
|
|
10
|
+
export const isSupported = Platform.OS === 'ios' ? ExpoAppIntegrity.isSupported : true;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Creates a new cryptographic key for use with the App Attest service.
|
|
14
|
+
* @return A Promise that is fulfilled with a string that contains the key identifier. The key itself is stored securely in the Secure Enclave.
|
|
15
|
+
* @platform ios
|
|
16
|
+
*/
|
|
5
17
|
export async function generateKey() {
|
|
6
18
|
if (Platform.OS !== 'ios') {
|
|
7
19
|
throw new Error('generateAssertion is only available on iOS');
|
|
@@ -9,30 +21,56 @@ export async function generateKey() {
|
|
|
9
21
|
return ExpoAppIntegrity.generateKey();
|
|
10
22
|
}
|
|
11
23
|
|
|
12
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Asks Apple to attest to the validity of a generated cryptographic key.
|
|
26
|
+
* @param keyId The identifier you received by calling the `generateKey` function.
|
|
27
|
+
* @param challenge A challenge string from your server.
|
|
28
|
+
* @return A Promise that is fulfilled with a string that contains the attestation data. A statement from Apple about the validity of the key associated with keyId. Send this to your server for processing.
|
|
29
|
+
* @platform ios
|
|
30
|
+
*/
|
|
31
|
+
export async function attestKey(keyId: string, challenge: string) {
|
|
13
32
|
if (Platform.OS !== 'ios') {
|
|
14
33
|
throw new Error('generateAssertion is only available on iOS');
|
|
15
34
|
}
|
|
16
|
-
return ExpoAppIntegrity.attestKey(
|
|
35
|
+
return ExpoAppIntegrity.attestKey(keyId, challenge);
|
|
17
36
|
}
|
|
18
37
|
|
|
19
|
-
|
|
38
|
+
/**
|
|
39
|
+
* Creates a block of data that demonstrates the legitimacy of an instance of your app running on a device.
|
|
40
|
+
* @param keyId The identifier you received by calling the `generateKey` function.
|
|
41
|
+
* @param challenge A string to be signed with the attested private key.
|
|
42
|
+
* @return A Promise that is fulfilled with a string that contains the assertion object. A data structure that you send to your server for processing.
|
|
43
|
+
* @platform ios
|
|
44
|
+
*/
|
|
45
|
+
export async function generateAssertion(keyId: string, challenge: string) {
|
|
20
46
|
if (Platform.OS !== 'ios') {
|
|
21
47
|
throw new Error('generateAssertion is only available on iOS');
|
|
22
48
|
}
|
|
23
|
-
return ExpoAppIntegrity.generateAssertion(
|
|
49
|
+
return ExpoAppIntegrity.generateAssertion(keyId, challenge);
|
|
24
50
|
}
|
|
25
51
|
|
|
26
|
-
|
|
52
|
+
/**
|
|
53
|
+
* Prepares the integrity token provider for the given cloud project number.
|
|
54
|
+
* @param cloudProjectNumber The cloud project number.
|
|
55
|
+
* @return A Promise that is fulfilled if the integrity token provider is prepared successfully.
|
|
56
|
+
* @platform android
|
|
57
|
+
*/
|
|
58
|
+
export async function prepareIntegrityTokenProvider(cloudProjectNumber: string) {
|
|
27
59
|
if (Platform.OS !== 'android') {
|
|
28
|
-
throw new Error('
|
|
60
|
+
throw new Error('prepareIntegrityTokenProvider is only available on Android');
|
|
29
61
|
}
|
|
30
|
-
return ExpoAppIntegrity.
|
|
62
|
+
return ExpoAppIntegrity.prepareIntegrityTokenProvider(cloudProjectNumber);
|
|
31
63
|
}
|
|
32
64
|
|
|
33
|
-
|
|
65
|
+
/**
|
|
66
|
+
* Requests an integrity verdict for the given request hash from Google Play.
|
|
67
|
+
* @param requestHash A string representing the request hash.
|
|
68
|
+
* @return A Promise that is fulfilled with a string that contains the integrity check result.
|
|
69
|
+
* @platform android
|
|
70
|
+
*/
|
|
71
|
+
export async function requestIntegrityCheck(requestHash: string) {
|
|
34
72
|
if (Platform.OS !== 'android') {
|
|
35
|
-
throw new Error('
|
|
73
|
+
throw new Error('requestIntegrityCheck is only available on Android');
|
|
36
74
|
}
|
|
37
|
-
return ExpoAppIntegrity.
|
|
75
|
+
return ExpoAppIntegrity.requestIntegrityCheck(requestHash);
|
|
38
76
|
}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { NativeModule } from 'expo-modules-core/types';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* @hidden
|
|
5
|
+
*/
|
|
3
6
|
export interface ExpoAppIntegrityModule extends NativeModule {
|
|
4
7
|
// iOS
|
|
8
|
+
isSupported: boolean;
|
|
5
9
|
generateKey(): Promise<string>;
|
|
6
|
-
attestKey(
|
|
7
|
-
generateAssertion(
|
|
10
|
+
attestKey(keyId: string, challenge: string): Promise<string>;
|
|
11
|
+
generateAssertion(keyId: string, challenge: string): Promise<string>;
|
|
8
12
|
// Android
|
|
9
13
|
prepareIntegrityTokenProvider(cloudProjectNumber: string): Promise<void>;
|
|
10
|
-
requestIntegrityCheck(
|
|
14
|
+
requestIntegrityCheck(requestHash: string): Promise<string>;
|
|
11
15
|
}
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
7b4229a2cc3684a4e5077d6baaea0e8e
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
47c3797099279b1b484bc0b6634c0f7027c33202
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
ce8af27715e7bd42f77fb47a85a6368fbfb57f83fd3537020712fce41430ef14
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
399b34f99e731da865ef0bf046c794f715fbb5a3ce529d4ec2ee076c329282c72b6f922fbc45e4c4c3a5579eb80b3b308f936d8ee71af19f9452841fc6f71663
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
58fe1ba1e0b70a87d303b14892c68fd1
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
b490cf3330352d01dbb9c0fbf6586ea6d9cedc94
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
be66edac2decef6961291a2750f3e329480f870109b8734a49b7e20f8f70a814
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
74c3ee7bc037b9e76eec856e5db57dc29cb252ac10ae66648b6e685307222f809efd66fdcd6f278ccf17d9c88cd979bbdda20f161ea4e47367ee945aa0b98e0a
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
e0c28a02b5d93c977d55695cfb6e5b4e
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1a8ef7e3530a2137105413859805383b628cd530
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
815b8d2d8bc9dd5f3ad3e6c8b191adea63e0041366c01aca5775489cf9bbdf2a
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
f83ce9b58e40101334152463af1976b14c03a4d72b7f2ccfb630476c8e5e40d46dd91b95c2ff4d6049ca36dc31f48d8deefba685ffa3fff0afaa5603dabdc704
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
46dcf18248b3e2f9abfec38c2ca2752e
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
91f48aff43d3c5eb8d21647e0fc381474e26fd2a
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
dc7f3b868aa67d29c49973c809f870b3f2288c8e4bd6852f40bde889968c3af2
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0edef747467c48adbd8435e77f95ab3c428c10bcee28572965a697e2141805c191924d3ecd71de3e7541c8adad8e1be5a9b1d6ae021ce70c325dd59b3dbc774f
|