diff options
| author | Daiki Ueno | 2009-09-12 14:58:55 +0000 |
|---|---|---|
| committer | Daiki Ueno | 2009-09-12 14:58:55 +0000 |
| commit | d85889e4c0472cc465ffec8dfe9854d206f5f6a1 (patch) | |
| tree | e971678f3adb688f89c9bca77272e6cc02d11319 /lisp | |
| parent | 36b434ee1a0afa7a31f257cd2a8c1864ee4ae6b2 (diff) | |
| download | emacs-d85889e4c0472cc465ffec8dfe9854d206f5f6a1.tar.gz emacs-d85889e4c0472cc465ffec8dfe9854d206f5f6a1.zip | |
(epg-make-context): Add autoload cookie.
(epg-list-keys, epg-cancel, epg-start-decrypt, epg-decrypt-file)
(epg-decrypt-string, epg-start-verify, epg-verify-file)
(epg-verify-string, epg-start-sign, epg-sign-file)
(epg-sign-string, epg-start-encrypt, epg-encrypt-file)
(epg-encrypt-string, epg-start-export-keys)
(epg-export-keys-to-file, epg-export-keys-to-string)
(epg-start-import-keys, epg-import-keys-from-file)
(epg-import-keys-from-string, epg-start-receive-keys)
(epg-receive-keys, epg-import-keys-from-server)
(epg-start-delete-keys, epg-delete-keys, epg-start-sign-keys)
(epg-sign-keys, epg-start-generate-key)
(epg-generate-key-from-file, epg-generate-key-from-string): Remove
autoload cookie.
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/ChangeLog | 17 | ||||
| -rw-r--r-- | lisp/epg.el | 31 |
2 files changed, 18 insertions, 30 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 14fee5ba12c..9a0cc52e5ac 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,20 @@ | |||
| 1 | 2009-09-12 Daiki Ueno <ueno@unixuser.org> | ||
| 2 | |||
| 3 | * epg.el (epg-make-context): Add autoload cookie. | ||
| 4 | (epg-list-keys, epg-cancel, epg-start-decrypt, epg-decrypt-file) | ||
| 5 | (epg-decrypt-string, epg-start-verify, epg-verify-file) | ||
| 6 | (epg-verify-string, epg-start-sign, epg-sign-file) | ||
| 7 | (epg-sign-string, epg-start-encrypt, epg-encrypt-file) | ||
| 8 | (epg-encrypt-string, epg-start-export-keys) | ||
| 9 | (epg-export-keys-to-file, epg-export-keys-to-string) | ||
| 10 | (epg-start-import-keys, epg-import-keys-from-file) | ||
| 11 | (epg-import-keys-from-string, epg-start-receive-keys) | ||
| 12 | (epg-receive-keys, epg-import-keys-from-server) | ||
| 13 | (epg-start-delete-keys, epg-delete-keys, epg-start-sign-keys) | ||
| 14 | (epg-sign-keys, epg-start-generate-key) | ||
| 15 | (epg-generate-key-from-file, epg-generate-key-from-string): Remove | ||
| 16 | autoload cookie. | ||
| 17 | |||
| 1 | 2009-09-12 Eli Zaretskii <eliz@gnu.org> | 18 | 2009-09-12 Eli Zaretskii <eliz@gnu.org> |
| 2 | 19 | ||
| 3 | * dos-fns.el (dos-reevaluate-defcustoms): Comment out the | 20 | * dos-fns.el (dos-reevaluate-defcustoms): Comment out the |
diff --git a/lisp/epg.el b/lisp/epg.el index 64489858a6d..d80e966c942 100644 --- a/lisp/epg.el +++ b/lisp/epg.el | |||
| @@ -181,6 +181,7 @@ | |||
| 181 | (signal 'wrong-type-argument (list 'epg-data-p data))) | 181 | (signal 'wrong-type-argument (list 'epg-data-p data))) |
| 182 | (aref (cdr data) 1)) | 182 | (aref (cdr data) 1)) |
| 183 | 183 | ||
| 184 | ;;;###autoload | ||
| 184 | (defun epg-make-context (&optional protocol armor textmode include-certs | 185 | (defun epg-make-context (&optional protocol armor textmode include-certs |
| 185 | cipher-algorithm digest-algorithm | 186 | cipher-algorithm digest-algorithm |
| 186 | compress-algorithm) | 187 | compress-algorithm) |
| @@ -1755,7 +1756,6 @@ This function is for internal use only." | |||
| 1755 | (if (aref line 6) | 1756 | (if (aref line 6) |
| 1756 | (epg--time-from-seconds (aref line 6))))) | 1757 | (epg--time-from-seconds (aref line 6))))) |
| 1757 | 1758 | ||
| 1758 | ;;;###autoload | ||
| 1759 | (defun epg-list-keys (context &optional name mode) | 1759 | (defun epg-list-keys (context &optional name mode) |
| 1760 | "Return a list of epg-key objects matched with NAME. | 1760 | "Return a list of epg-key objects matched with NAME. |
| 1761 | If MODE is nil or 'public, only public keyring should be searched. | 1761 | If MODE is nil or 'public, only public keyring should be searched. |
| @@ -1922,7 +1922,6 @@ You can then use `write-region' to write new data into the file." | |||
| 1922 | (epg-sig-notation-value notation))))) | 1922 | (epg-sig-notation-value notation))))) |
| 1923 | notations))) | 1923 | notations))) |
| 1924 | 1924 | ||
| 1925 | ;;;###autoload | ||
| 1926 | (defun epg-cancel (context) | 1925 | (defun epg-cancel (context) |
| 1927 | (if (buffer-live-p (process-buffer (epg-context-process context))) | 1926 | (if (buffer-live-p (process-buffer (epg-context-process context))) |
| 1928 | (save-excursion | 1927 | (save-excursion |
| @@ -1934,7 +1933,6 @@ You can then use `write-region' to write new data into the file." | |||
| 1934 | (if (eq (process-status (epg-context-process context)) 'run) | 1933 | (if (eq (process-status (epg-context-process context)) 'run) |
| 1935 | (delete-process (epg-context-process context)))) | 1934 | (delete-process (epg-context-process context)))) |
| 1936 | 1935 | ||
| 1937 | ;;;###autoload | ||
| 1938 | (defun epg-start-decrypt (context cipher) | 1936 | (defun epg-start-decrypt (context cipher) |
| 1939 | "Initiate a decrypt operation on CIPHER. | 1937 | "Initiate a decrypt operation on CIPHER. |
| 1940 | CIPHER must be a file data object. | 1938 | CIPHER must be a file data object. |
| @@ -1966,7 +1964,6 @@ If you are unsure, use synchronous version of this function | |||
| 1966 | (signal 'epg-error (list "No data"))) | 1964 | (signal 'epg-error (list "No data"))) |
| 1967 | (signal 'epg-error (list "Can't decrypt" error))))) | 1965 | (signal 'epg-error (list "Can't decrypt" error))))) |
| 1968 | 1966 | ||
| 1969 | ;;;###autoload | ||
| 1970 | (defun epg-decrypt-file (context cipher plain) | 1967 | (defun epg-decrypt-file (context cipher plain) |
| 1971 | "Decrypt a file CIPHER and store the result to a file PLAIN. | 1968 | "Decrypt a file CIPHER and store the result to a file PLAIN. |
| 1972 | If PLAIN is nil, it returns the result as a string." | 1969 | If PLAIN is nil, it returns the result as a string." |
| @@ -1985,7 +1982,6 @@ If PLAIN is nil, it returns the result as a string." | |||
| 1985 | (epg-delete-output-file context)) | 1982 | (epg-delete-output-file context)) |
| 1986 | (epg-reset context))) | 1983 | (epg-reset context))) |
| 1987 | 1984 | ||
| 1988 | ;;;###autoload | ||
| 1989 | (defun epg-decrypt-string (context cipher) | 1985 | (defun epg-decrypt-string (context cipher) |
| 1990 | "Decrypt a string CIPHER and return the plain text." | 1986 | "Decrypt a string CIPHER and return the plain text." |
| 1991 | (let ((input-file (epg--make-temp-file "epg-input")) | 1987 | (let ((input-file (epg--make-temp-file "epg-input")) |
| @@ -2004,7 +2000,6 @@ If PLAIN is nil, it returns the result as a string." | |||
| 2004 | (delete-file input-file)) | 2000 | (delete-file input-file)) |
| 2005 | (epg-reset context)))) | 2001 | (epg-reset context)))) |
| 2006 | 2002 | ||
| 2007 | ;;;###autoload | ||
| 2008 | (defun epg-start-verify (context signature &optional signed-text) | 2003 | (defun epg-start-verify (context signature &optional signed-text) |
| 2009 | "Initiate a verify operation on SIGNATURE. | 2004 | "Initiate a verify operation on SIGNATURE. |
| 2010 | SIGNATURE and SIGNED-TEXT are a data object if they are specified. | 2005 | SIGNATURE and SIGNED-TEXT are a data object if they are specified. |
| @@ -2045,7 +2040,6 @@ If you are unsure, use synchronous version of this function | |||
| 2045 | (if (eq (process-status (epg-context-process context)) 'run) | 2040 | (if (eq (process-status (epg-context-process context)) 'run) |
| 2046 | (process-send-eof (epg-context-process context)))))) | 2041 | (process-send-eof (epg-context-process context)))))) |
| 2047 | 2042 | ||
| 2048 | ;;;###autoload | ||
| 2049 | (defun epg-verify-file (context signature &optional signed-text plain) | 2043 | (defun epg-verify-file (context signature &optional signed-text plain) |
| 2050 | "Verify a file SIGNATURE. | 2044 | "Verify a file SIGNATURE. |
| 2051 | SIGNED-TEXT and PLAIN are also a file if they are specified. | 2045 | SIGNED-TEXT and PLAIN are also a file if they are specified. |
| @@ -2073,7 +2067,6 @@ stored into the file after successful verification." | |||
| 2073 | (epg-delete-output-file context)) | 2067 | (epg-delete-output-file context)) |
| 2074 | (epg-reset context))) | 2068 | (epg-reset context))) |
| 2075 | 2069 | ||
| 2076 | ;;;###autoload | ||
| 2077 | (defun epg-verify-string (context signature &optional signed-text) | 2070 | (defun epg-verify-string (context signature &optional signed-text) |
| 2078 | "Verify a string SIGNATURE. | 2071 | "Verify a string SIGNATURE. |
| 2079 | SIGNED-TEXT is a string if it is specified. | 2072 | SIGNED-TEXT is a string if it is specified. |
| @@ -2104,7 +2097,6 @@ successful verification." | |||
| 2104 | (delete-file input-file)) | 2097 | (delete-file input-file)) |
| 2105 | (epg-reset context)))) | 2098 | (epg-reset context)))) |
| 2106 | 2099 | ||
| 2107 | ;;;###autoload | ||
| 2108 | (defun epg-start-sign (context plain &optional mode) | 2100 | (defun epg-start-sign (context plain &optional mode) |
| 2109 | "Initiate a sign operation on PLAIN. | 2101 | "Initiate a sign operation on PLAIN. |
| 2110 | PLAIN is a data object. | 2102 | PLAIN is a data object. |
| @@ -2150,7 +2142,6 @@ If you are unsure, use synchronous version of this function | |||
| 2150 | (if (eq (process-status (epg-context-process context)) 'run) | 2142 | (if (eq (process-status (epg-context-process context)) 'run) |
| 2151 | (process-send-eof (epg-context-process context))))) | 2143 | (process-send-eof (epg-context-process context))))) |
| 2152 | 2144 | ||
| 2153 | ;;;###autoload | ||
| 2154 | (defun epg-sign-file (context plain signature &optional mode) | 2145 | (defun epg-sign-file (context plain signature &optional mode) |
| 2155 | "Sign a file PLAIN and store the result to a file SIGNATURE. | 2146 | "Sign a file PLAIN and store the result to a file SIGNATURE. |
| 2156 | If SIGNATURE is nil, it returns the result as a string. | 2147 | If SIGNATURE is nil, it returns the result as a string. |
| @@ -2176,7 +2167,6 @@ Otherwise, it makes a cleartext signature." | |||
| 2176 | (epg-delete-output-file context)) | 2167 | (epg-delete-output-file context)) |
| 2177 | (epg-reset context))) | 2168 | (epg-reset context))) |
| 2178 | 2169 | ||
| 2179 | ;;;###autoload | ||
| 2180 | (defun epg-sign-string (context plain &optional mode) | 2170 | (defun epg-sign-string (context plain &optional mode) |
| 2181 | "Sign a string PLAIN and return the output as string. | 2171 | "Sign a string PLAIN and return the output as string. |
| 2182 | If optional 3rd argument MODE is t or 'detached, it makes a detached signature. | 2172 | If optional 3rd argument MODE is t or 'detached, it makes a detached signature. |
| @@ -2214,7 +2204,6 @@ Otherwise, it makes a cleartext signature." | |||
| 2214 | (delete-file input-file)) | 2204 | (delete-file input-file)) |
| 2215 | (epg-reset context)))) | 2205 | (epg-reset context)))) |
| 2216 | 2206 | ||
| 2217 | ;;;###autoload | ||
| 2218 | (defun epg-start-encrypt (context plain recipients | 2207 | (defun epg-start-encrypt (context plain recipients |
| 2219 | &optional sign always-trust) | 2208 | &optional sign always-trust) |
| 2220 | "Initiate an encrypt operation on PLAIN. | 2209 | "Initiate an encrypt operation on PLAIN. |
| @@ -2265,7 +2254,6 @@ If you are unsure, use synchronous version of this function | |||
| 2265 | (if (eq (process-status (epg-context-process context)) 'run) | 2254 | (if (eq (process-status (epg-context-process context)) 'run) |
| 2266 | (process-send-eof (epg-context-process context))))) | 2255 | (process-send-eof (epg-context-process context))))) |
| 2267 | 2256 | ||
| 2268 | ;;;###autoload | ||
| 2269 | (defun epg-encrypt-file (context plain recipients | 2257 | (defun epg-encrypt-file (context plain recipients |
| 2270 | cipher &optional sign always-trust) | 2258 | cipher &optional sign always-trust) |
| 2271 | "Encrypt a file PLAIN and store the result to a file CIPHER. | 2259 | "Encrypt a file PLAIN and store the result to a file CIPHER. |
| @@ -2295,7 +2283,6 @@ If RECIPIENTS is nil, it performs symmetric encryption." | |||
| 2295 | (epg-delete-output-file context)) | 2283 | (epg-delete-output-file context)) |
| 2296 | (epg-reset context))) | 2284 | (epg-reset context))) |
| 2297 | 2285 | ||
| 2298 | ;;;###autoload | ||
| 2299 | (defun epg-encrypt-string (context plain recipients | 2286 | (defun epg-encrypt-string (context plain recipients |
| 2300 | &optional sign always-trust) | 2287 | &optional sign always-trust) |
| 2301 | "Encrypt a string PLAIN. | 2288 | "Encrypt a string PLAIN. |
| @@ -2337,7 +2324,6 @@ If RECIPIENTS is nil, it performs symmetric encryption." | |||
| 2337 | (delete-file input-file)) | 2324 | (delete-file input-file)) |
| 2338 | (epg-reset context)))) | 2325 | (epg-reset context)))) |
| 2339 | 2326 | ||
| 2340 | ;;;###autoload | ||
| 2341 | (defun epg-start-export-keys (context keys) | 2327 | (defun epg-start-export-keys (context keys) |
| 2342 | "Initiate an export keys operation. | 2328 | "Initiate an export keys operation. |
| 2343 | 2329 | ||
| @@ -2355,7 +2341,6 @@ If you are unsure, use synchronous version of this function | |||
| 2355 | (car (epg-key-sub-key-list key)))) | 2341 | (car (epg-key-sub-key-list key)))) |
| 2356 | keys)))) | 2342 | keys)))) |
| 2357 | 2343 | ||
| 2358 | ;;;###autoload | ||
| 2359 | (defun epg-export-keys-to-file (context keys file) | 2344 | (defun epg-export-keys-to-file (context keys file) |
| 2360 | "Extract public KEYS." | 2345 | "Extract public KEYS." |
| 2361 | (unwind-protect | 2346 | (unwind-protect |
| @@ -2375,12 +2360,10 @@ If you are unsure, use synchronous version of this function | |||
| 2375 | (epg-delete-output-file context)) | 2360 | (epg-delete-output-file context)) |
| 2376 | (epg-reset context))) | 2361 | (epg-reset context))) |
| 2377 | 2362 | ||
| 2378 | ;;;###autoload | ||
| 2379 | (defun epg-export-keys-to-string (context keys) | 2363 | (defun epg-export-keys-to-string (context keys) |
| 2380 | "Extract public KEYS and return them as a string." | 2364 | "Extract public KEYS and return them as a string." |
| 2381 | (epg-export-keys-to-file context keys nil)) | 2365 | (epg-export-keys-to-file context keys nil)) |
| 2382 | 2366 | ||
| 2383 | ;;;###autoload | ||
| 2384 | (defun epg-start-import-keys (context keys) | 2367 | (defun epg-start-import-keys (context keys) |
| 2385 | "Initiate an import keys operation. | 2368 | "Initiate an import keys operation. |
| 2386 | KEYS is a data object. | 2369 | KEYS is a data object. |
| @@ -2412,17 +2395,14 @@ If you are unsure, use synchronous version of this function | |||
| 2412 | (epg-context-result-for context 'error)))) | 2395 | (epg-context-result-for context 'error)))) |
| 2413 | (epg-reset context))) | 2396 | (epg-reset context))) |
| 2414 | 2397 | ||
| 2415 | ;;;###autoload | ||
| 2416 | (defun epg-import-keys-from-file (context keys) | 2398 | (defun epg-import-keys-from-file (context keys) |
| 2417 | "Add keys from a file KEYS." | 2399 | "Add keys from a file KEYS." |
| 2418 | (epg--import-keys-1 context (epg-make-data-from-file keys))) | 2400 | (epg--import-keys-1 context (epg-make-data-from-file keys))) |
| 2419 | 2401 | ||
| 2420 | ;;;###autoload | ||
| 2421 | (defun epg-import-keys-from-string (context keys) | 2402 | (defun epg-import-keys-from-string (context keys) |
| 2422 | "Add keys from a string KEYS." | 2403 | "Add keys from a string KEYS." |
| 2423 | (epg--import-keys-1 context (epg-make-data-from-string keys))) | 2404 | (epg--import-keys-1 context (epg-make-data-from-string keys))) |
| 2424 | 2405 | ||
| 2425 | ;;;###autoload | ||
| 2426 | (defun epg-start-receive-keys (context key-id-list) | 2406 | (defun epg-start-receive-keys (context key-id-list) |
| 2427 | "Initiate a receive key operation. | 2407 | "Initiate a receive key operation. |
| 2428 | KEY-ID-LIST is a list of key IDs. | 2408 | KEY-ID-LIST is a list of key IDs. |
| @@ -2436,7 +2416,6 @@ If you are unsure, use synchronous version of this function | |||
| 2436 | (epg-context-set-result context nil) | 2416 | (epg-context-set-result context nil) |
| 2437 | (epg--start context (cons "--recv-keys" key-id-list))) | 2417 | (epg--start context (cons "--recv-keys" key-id-list))) |
| 2438 | 2418 | ||
| 2439 | ;;;###autoload | ||
| 2440 | (defun epg-receive-keys (context keys) | 2419 | (defun epg-receive-keys (context keys) |
| 2441 | "Add keys from server. | 2420 | "Add keys from server. |
| 2442 | KEYS is a list of key IDs" | 2421 | KEYS is a list of key IDs" |
| @@ -2449,10 +2428,8 @@ KEYS is a list of key IDs" | |||
| 2449 | (epg-context-result-for context 'error)))) | 2428 | (epg-context-result-for context 'error)))) |
| 2450 | (epg-reset context))) | 2429 | (epg-reset context))) |
| 2451 | 2430 | ||
| 2452 | ;;;###autoload | ||
| 2453 | (defalias 'epg-import-keys-from-server 'epg-receive-keys) | 2431 | (defalias 'epg-import-keys-from-server 'epg-receive-keys) |
| 2454 | 2432 | ||
| 2455 | ;;;###autoload | ||
| 2456 | (defun epg-start-delete-keys (context keys &optional allow-secret) | 2433 | (defun epg-start-delete-keys (context keys &optional allow-secret) |
| 2457 | "Initiate a delete keys operation. | 2434 | "Initiate a delete keys operation. |
| 2458 | 2435 | ||
| @@ -2472,7 +2449,6 @@ If you are unsure, use synchronous version of this function | |||
| 2472 | (car (epg-key-sub-key-list key)))) | 2449 | (car (epg-key-sub-key-list key)))) |
| 2473 | keys)))) | 2450 | keys)))) |
| 2474 | 2451 | ||
| 2475 | ;;;###autoload | ||
| 2476 | (defun epg-delete-keys (context keys &optional allow-secret) | 2452 | (defun epg-delete-keys (context keys &optional allow-secret) |
| 2477 | "Delete KEYS from the key ring." | 2453 | "Delete KEYS from the key ring." |
| 2478 | (unwind-protect | 2454 | (unwind-protect |
| @@ -2488,7 +2464,6 @@ If you are unsure, use synchronous version of this function | |||
| 2488 | (error "Delete keys failed"))))) | 2464 | (error "Delete keys failed"))))) |
| 2489 | (epg-reset context))) | 2465 | (epg-reset context))) |
| 2490 | 2466 | ||
| 2491 | ;;;###autoload | ||
| 2492 | (defun epg-start-sign-keys (context keys &optional local) | 2467 | (defun epg-start-sign-keys (context keys &optional local) |
| 2493 | "Initiate a sign keys operation. | 2468 | "Initiate a sign keys operation. |
| 2494 | 2469 | ||
| @@ -2509,7 +2484,6 @@ If you are unsure, use synchronous version of this function | |||
| 2509 | keys)))) | 2484 | keys)))) |
| 2510 | (make-obsolete 'epg-start-sign-keys "do not use." "23.1") | 2485 | (make-obsolete 'epg-start-sign-keys "do not use." "23.1") |
| 2511 | 2486 | ||
| 2512 | ;;;###autoload | ||
| 2513 | (defun epg-sign-keys (context keys &optional local) | 2487 | (defun epg-sign-keys (context keys &optional local) |
| 2514 | "Sign KEYS from the key ring." | 2488 | "Sign KEYS from the key ring." |
| 2515 | (unwind-protect | 2489 | (unwind-protect |
| @@ -2522,7 +2496,6 @@ If you are unsure, use synchronous version of this function | |||
| 2522 | (epg-reset context))) | 2496 | (epg-reset context))) |
| 2523 | (make-obsolete 'epg-sign-keys "do not use." "23.1") | 2497 | (make-obsolete 'epg-sign-keys "do not use." "23.1") |
| 2524 | 2498 | ||
| 2525 | ;;;###autoload | ||
| 2526 | (defun epg-start-generate-key (context parameters) | 2499 | (defun epg-start-generate-key (context parameters) |
| 2527 | "Initiate a key generation. | 2500 | "Initiate a key generation. |
| 2528 | PARAMETERS specifies parameters for the key. | 2501 | PARAMETERS specifies parameters for the key. |
| @@ -2544,7 +2517,6 @@ If you are unsure, use synchronous version of this function | |||
| 2544 | (if (eq (process-status (epg-context-process context)) 'run) | 2517 | (if (eq (process-status (epg-context-process context)) 'run) |
| 2545 | (process-send-eof (epg-context-process context))))) | 2518 | (process-send-eof (epg-context-process context))))) |
| 2546 | 2519 | ||
| 2547 | ;;;###autoload | ||
| 2548 | (defun epg-generate-key-from-file (context parameters) | 2520 | (defun epg-generate-key-from-file (context parameters) |
| 2549 | "Generate a new key pair. | 2521 | "Generate a new key pair. |
| 2550 | PARAMETERS is a file which tells how to create the key." | 2522 | PARAMETERS is a file which tells how to create the key." |
| @@ -2557,7 +2529,6 @@ PARAMETERS is a file which tells how to create the key." | |||
| 2557 | (epg-context-result-for context 'error)))) | 2529 | (epg-context-result-for context 'error)))) |
| 2558 | (epg-reset context))) | 2530 | (epg-reset context))) |
| 2559 | 2531 | ||
| 2560 | ;;;###autoload | ||
| 2561 | (defun epg-generate-key-from-string (context parameters) | 2532 | (defun epg-generate-key-from-string (context parameters) |
| 2562 | "Generate a new key pair. | 2533 | "Generate a new key pair. |
| 2563 | PARAMETERS is a string which tells how to create the key." | 2534 | PARAMETERS is a string which tells how to create the key." |