element-android/matrix-sdk-android/org.matrix.android.sdk.api.securestorage/-secret-storing-utils/index.html
2023-01-05 13:08:52 +00:00

217 lines
25 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" charset="UTF-8">
<title>SecretStoringUtils</title>
<link href="../../../images/logo-icon.svg" rel="icon" type="image/svg">
<script>var pathToRoot = "../../../";</script>
<script>const storage = localStorage.getItem("dokka-dark-mode")
if (storage == null) {
const osDarkSchemePreferred = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
if (osDarkSchemePreferred === true) {
document.getElementsByTagName("html")[0].classList.add("theme-dark")
}
} else {
const savedDarkMode = JSON.parse(storage)
if(savedDarkMode === true) {
document.getElementsByTagName("html")[0].classList.add("theme-dark")
}
}
</script>
<script type="text/javascript" src="../../../scripts/sourceset_dependencies.js" async="async"></script>
<link href="../../../styles/style.css" rel="Stylesheet">
<link href="../../../styles/jetbrains-mono.css" rel="Stylesheet">
<link href="../../../styles/main.css" rel="Stylesheet">
<link href="../../../styles/prism.css" rel="Stylesheet">
<link href="../../../styles/logo-styles.css" rel="Stylesheet">
<script type="text/javascript" src="../../../scripts/clipboard.js" async="async"></script>
<script type="text/javascript" src="../../../scripts/navigation-loader.js" async="async"></script>
<script type="text/javascript" src="../../../scripts/platform-content-handler.js" async="async"></script>
<script type="text/javascript" src="../../../scripts/main.js" defer="defer"></script>
<script type="text/javascript" src="../../../scripts/prism.js" async="async"></script>
<script type="text/javascript" src="../../../scripts/symbol-parameters-wrapper_deferred.js" defer="defer"></script>
</head>
<body>
<div class="navigation-wrapper" id="navigation-wrapper">
<div id="leftToggler"><span class="icon-toggler"></span></div>
<div class="library-name">
<a href="../../../index.html">
<span>matrix-sdk-android</span>
</a>
</div>
<div>
</div>
<div class="pull-right d-flex">
<button id="theme-toggle-button"><span id="theme-toggle"></span></button>
<div id="searchBar"></div>
</div>
</div>
<div id="container">
<div id="leftColumn">
<div id="sideMenu"></div>
</div>
<div id="main">
<div class="main-content" id="content" pageIds="matrix-sdk-android::org.matrix.android.sdk.api.securestorage/SecretStoringUtils///PointingToDeclaration//468305090">
<div class="breadcrumbs"><a href="../../../index.html">matrix-sdk-android</a><span class="delimiter">/</span><a href="../index.html">org.matrix.android.sdk.api.securestorage</a><span class="delimiter">/</span><span class="current">SecretStoringUtils</span></div>
<div class="cover ">
<h1 class="cover"><span>Secret</span><wbr></wbr><span>Storing</span><wbr></wbr><span><span>Utils</span></span></h1>
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":matrix-sdk-android:dokkaHtml/release"><div class="symbol monospace"><span class="token keyword">class </span><a href="index.html">SecretStoringUtils</a> <span><span class="token annotation builtin">@</span><span data-unresolved-link="javax.inject/Inject///PointingToDeclaration/"><span class="token annotation builtin">Inject</span></span> </span><span class="token keyword">constructor</span><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">context<span class="token operator">: </span><a href="https://developer.android.com/reference/kotlin/android/content/Context.html">Context</a><span class="token punctuation">, </span></span><span class="parameter ">keyStore<span class="token operator">: </span><a href="https://developer.android.com/reference/kotlin/java/security/KeyStore.html">KeyStore</a><span class="token punctuation">, </span></span><span class="parameter ">buildVersionSdkIntProvider<span class="token operator">: </span><a href="../../org.matrix.android.sdk.api.util/-build-version-sdk-int-provider/index.html">BuildVersionSdkIntProvider</a><span class="token punctuation">, </span></span><span class="parameter ">keyNeedsUserAuthentication<span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a><span class="token operator"> = </span><span class="token boolean">false</span></span></span><span class="token punctuation">)</span></div><p class="paragraph">Offers simple methods to securely store secrets in an Android Application. The encryption keys are randomly generated and securely managed by the key store, thus your secrets are safe. You only need to remember a key alias to perform encrypt/decrypt operations.</p><p class="paragraph"><b>Android M++</b> On android M+, the keystore can generates and store AES keys via API. But below API M this functionality is not available.</p><p class="paragraph"><b>Android [K-M[</b> For android >=L and </p><p class="paragraph">Sample usage: <code> val secret = &quot;The answer is 42&quot; val KEncrypted = SecretStoringUtils.securelyStoreString(secret, &quot;myAlias&quot;) //This can be stored anywhere e.g. encoded in b64 and stored in preference for example</p><div class="sample-container"><pre><code class="block lang-kotlin" theme="idea">//to get back the secret, just call
val kDecrypted = SecretStoringUtils.loadSecureSecret(KEncrypted, &quot;myAlias&quot;)</code></pre><span class="top-right-position"><span class="copy-icon"></span><div class="copy-popup-wrapper popup-to-left"><span class="copy-popup-icon"></span><span>Content copied to clipboard</span></div></span></div></code><p class="paragraph">You can also just use this utility to store a secret key, and use any encryption algorithm that you want.</p><p class="paragraph">Important: Keys stored in the keystore can be wiped out (depends of the OS version, like for example if you add a pin or change the schema); So you might and with a useless pile of bytes.</p></div></div>
</div>
<div class="tabbedcontent">
<div class="tabs-section" tabs-section="tabs-section"><button class="section-tab" data-active="" data-togglable="Types">Types</button><button class="section-tab" data-togglable="Constructors">Constructors</button><button class="section-tab" data-togglable="Functions">Functions</button></div>
<div class="tabs-section-body">
<h2 class="tabbedcontent">Constructors</h2>
<div class="table" data-togglable="Constructors"><a data-name="-184048210%2FConstructors%2F468305090" anchor-label="SecretStoringUtils" id="-184048210%2FConstructors%2F468305090" data-filterable-set=":matrix-sdk-android:dokkaHtml/release"></a>
<div class="table-row" data-filterable-current=":matrix-sdk-android:dokkaHtml/release" data-filterable-set=":matrix-sdk-android:dokkaHtml/release">
<div class="main-subrow keyValue TabbedContent">
<div class=""><span class="inline-flex">
<div><a href="-secret-storing-utils.html"><span>Secret</span><wbr></wbr><span>Storing</span><wbr></wbr><span><span>Utils</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="-184048210%2FConstructors%2F468305090"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":matrix-sdk-android:dokkaHtml/release"><div class="symbol monospace"><div class="block"><div class="block"><span class="token annotation builtin">@</span><span data-unresolved-link="javax.inject/Inject///PointingToDeclaration/"><span class="token annotation builtin">Inject</span></span></div></div><span class="token keyword"></span><span class="token keyword">fun </span><a href="-secret-storing-utils.html"><span class="token function">SecretStoringUtils</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">context<span class="token operator">: </span><a href="https://developer.android.com/reference/kotlin/android/content/Context.html">Context</a><span class="token punctuation">, </span></span><span class="parameter ">keyStore<span class="token operator">: </span><a href="https://developer.android.com/reference/kotlin/java/security/KeyStore.html">KeyStore</a><span class="token punctuation">, </span></span><span class="parameter ">buildVersionSdkIntProvider<span class="token operator">: </span><a href="../../org.matrix.android.sdk.api.util/-build-version-sdk-int-provider/index.html">BuildVersionSdkIntProvider</a><span class="token punctuation">, </span></span><span class="parameter ">keyNeedsUserAuthentication<span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a><span class="token operator"> = </span><span class="token boolean">false</span></span></span><span class="token punctuation">)</span></div></div></div>
</div>
</div>
</div>
</div>
</div>
<h2 class="">Types</h2>
<div class="table" data-togglable="Types"><a data-name="1463018523%2FClasslikes%2F468305090" anchor-label="Companion" id="1463018523%2FClasslikes%2F468305090" data-filterable-set=":matrix-sdk-android:dokkaHtml/release"></a>
<div class="table-row" data-filterable-current=":matrix-sdk-android:dokkaHtml/release" data-filterable-set=":matrix-sdk-android:dokkaHtml/release">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="-companion/index.html"><span><span>Companion</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="1463018523%2FClasslikes%2F468305090"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":matrix-sdk-android:dokkaHtml/release"><div class="symbol monospace"><span class="token keyword">object </span><a href="-companion/index.html">Companion</a></div></div></div>
</div>
</div>
</div>
</div>
</div>
<h2 class="">Functions</h2>
<div class="table" data-togglable="Functions"><a data-name="2041804593%2FFunctions%2F468305090" anchor-label="ensureKey" id="2041804593%2FFunctions%2F468305090" data-filterable-set=":matrix-sdk-android:dokkaHtml/release"></a>
<div class="table-row" data-filterable-current=":matrix-sdk-android:dokkaHtml/release" data-filterable-set=":matrix-sdk-android:dokkaHtml/release">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="ensure-key.html"><span>ensure</span><wbr></wbr><span><span>Key</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="2041804593%2FFunctions%2F468305090"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":matrix-sdk-android:dokkaHtml/release"><div class="symbol monospace"><span class="token keyword"></span><span class="token keyword">fun </span><a href="ensure-key.html"><span class="token function">ensureKey</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">alias<span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="https://developer.android.com/reference/kotlin/java/security/KeyStore.Entry.html">KeyStore.Entry</a></div><div class="brief "><p class="paragraph">Allows creation of the crypto keys associated witht he <a href="ensure-key.html">alias</a> before encrypting some value with it.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="2109154200%2FFunctions%2F468305090" anchor-label="getEncryptCipher" id="2109154200%2FFunctions%2F468305090" data-filterable-set=":matrix-sdk-android:dokkaHtml/release"></a>
<div class="table-row" data-filterable-current=":matrix-sdk-android:dokkaHtml/release" data-filterable-set=":matrix-sdk-android:dokkaHtml/release">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="get-encrypt-cipher.html"><span>get</span><wbr></wbr><span>Encrypt</span><wbr></wbr><span><span>Cipher</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="2109154200%2FFunctions%2F468305090"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":matrix-sdk-android:dokkaHtml/release"><div class="symbol monospace"><span class="token keyword"></span><span class="token keyword">fun </span><a href="get-encrypt-cipher.html"><span class="token function">getEncryptCipher</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">alias<span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="https://developer.android.com/reference/kotlin/javax/crypto/Cipher.html">Cipher</a></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="1880473696%2FFunctions%2F468305090" anchor-label="loadSecureSecret" id="1880473696%2FFunctions%2F468305090" data-filterable-set=":matrix-sdk-android:dokkaHtml/release"></a>
<div class="table-row" data-filterable-current=":matrix-sdk-android:dokkaHtml/release" data-filterable-set=":matrix-sdk-android:dokkaHtml/release">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="load-secure-secret.html"><span>load</span><wbr></wbr><span>Secure</span><wbr></wbr><span><span>Secret</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="1880473696%2FFunctions%2F468305090"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":matrix-sdk-android:dokkaHtml/release"><div class="symbol monospace"><span class="token keyword"></span><span class="token keyword">fun </span><span class="token operator">&lt;</span><span class="token keyword"></span><a href="load-secure-secret.html">T</a><span class="token operator">&gt; </span><a href="load-secure-secret.html"><span class="token function">loadSecureSecret</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">inputStream<span class="token operator">: </span><a href="https://developer.android.com/reference/kotlin/java/io/InputStream.html">InputStream</a><span class="token punctuation">, </span></span><span class="parameter ">keyAlias<span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="load-secure-secret.html">T</a><span class="token operator">?</span></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="1307228215%2FFunctions%2F468305090" anchor-label="loadSecureSecretBytes" id="1307228215%2FFunctions%2F468305090" data-filterable-set=":matrix-sdk-android:dokkaHtml/release"></a>
<div class="table-row" data-filterable-current=":matrix-sdk-android:dokkaHtml/release" data-filterable-set=":matrix-sdk-android:dokkaHtml/release">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="load-secure-secret-bytes.html"><span>load</span><wbr></wbr><span>Secure</span><wbr></wbr><span>Secret</span><wbr></wbr><span><span>Bytes</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="1307228215%2FFunctions%2F468305090"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":matrix-sdk-android:dokkaHtml/release"><div class="symbol monospace"><span class="token keyword"></span><span class="token keyword">fun </span><a href="load-secure-secret-bytes.html"><span class="token function">loadSecureSecretBytes</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">encrypted<span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-byte-array/index.html">ByteArray</a><span class="token punctuation">, </span></span><span class="parameter ">keyAlias<span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-byte-array/index.html">ByteArray</a></div><div class="brief "><p class="paragraph">Decrypt a secret that was encrypted by <a href="securely-store-bytes.html">securelyStoreBytes</a>.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="-2081374057%2FFunctions%2F468305090" anchor-label="safeDeleteKey" id="-2081374057%2FFunctions%2F468305090" data-filterable-set=":matrix-sdk-android:dokkaHtml/release"></a>
<div class="table-row" data-filterable-current=":matrix-sdk-android:dokkaHtml/release" data-filterable-set=":matrix-sdk-android:dokkaHtml/release">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="safe-delete-key.html"><span>safe</span><wbr></wbr><span>Delete</span><wbr></wbr><span><span>Key</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="-2081374057%2FFunctions%2F468305090"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":matrix-sdk-android:dokkaHtml/release"><div class="symbol monospace"><span class="token keyword"></span><span class="token keyword">fun </span><a href="safe-delete-key.html"><span class="token function">safeDeleteKey</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">keyAlias<span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></span></span><span class="token punctuation">)</span></div><div class="brief "><p class="paragraph">Deletes the key associated with the <a href="safe-delete-key.html">keyAlias</a> and logs any <a href="https://developer.android.com/reference/kotlin/java/security/KeyStoreException.html">KeyStoreException</a> that could happen.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="-1896768039%2FFunctions%2F468305090" anchor-label="securelyStoreBytes" id="-1896768039%2FFunctions%2F468305090" data-filterable-set=":matrix-sdk-android:dokkaHtml/release"></a>
<div class="table-row" data-filterable-current=":matrix-sdk-android:dokkaHtml/release" data-filterable-set=":matrix-sdk-android:dokkaHtml/release">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="securely-store-bytes.html"><span>securely</span><wbr></wbr><span>Store</span><wbr></wbr><span><span>Bytes</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="-1896768039%2FFunctions%2F468305090"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":matrix-sdk-android:dokkaHtml/release"><div class="symbol monospace"><span class="token keyword"></span><span class="token keyword">fun </span><a href="securely-store-bytes.html"><span class="token function">securelyStoreBytes</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">secret<span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-byte-array/index.html">ByteArray</a><span class="token punctuation">, </span></span><span class="parameter ">keyAlias<span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-byte-array/index.html">ByteArray</a></div><div class="brief "><p class="paragraph">Encrypt the given secret using the android Keystore. On android >= M, will directly use the keystore to generate a symmetric key On android >= Lollipop and </p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="1951925124%2FFunctions%2F468305090" anchor-label="securelyStoreObject" id="1951925124%2FFunctions%2F468305090" data-filterable-set=":matrix-sdk-android:dokkaHtml/release"></a>
<div class="table-row" data-filterable-current=":matrix-sdk-android:dokkaHtml/release" data-filterable-set=":matrix-sdk-android:dokkaHtml/release">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="securely-store-object.html"><span>securely</span><wbr></wbr><span>Store</span><wbr></wbr><span><span>Object</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="1951925124%2FFunctions%2F468305090"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":matrix-sdk-android:dokkaHtml/release"><div class="symbol monospace"><span class="token keyword"></span><span class="token keyword">fun </span><a href="securely-store-object.html"><span class="token function">securelyStoreObject</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">any<span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a><span class="token punctuation">, </span></span><span class="parameter ">keyAlias<span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a><span class="token punctuation">, </span></span><span class="parameter ">output<span class="token operator">: </span><a href="https://developer.android.com/reference/kotlin/java/io/OutputStream.html">OutputStream</a></span></span><span class="token punctuation">)</span></div></div></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<span class="go-to-top-icon"><a href="#content" id="go-to-top-link"></a></span><span>© 2023 Copyright</span><span
class="pull-right"><span>Generated by </span><a
href="https://github.com/Kotlin/dokka"><span>dokka</span><span class="padded-icon"></span></a></span>
</div>
</div>
</div>
</body>
</html>