{"id":795,"date":"2009-12-03T23:01:21","date_gmt":"2009-12-03T23:01:21","guid":{"rendered":"http:\/\/pchero21.com\/?p=795"},"modified":"2009-12-03T23:01:21","modified_gmt":"2009-12-03T23:01:21","slug":"openlssl-rsa-%ed%8c%a8%ed%82%a4%ec%a7%80%eb%a5%bc-%ec%9d%b4%ec%9a%a9%ed%95%9c-%ea%b3%b5%ea%b0%9c%ed%82%a4-%ea%b0%9c%ec%9d%b8%ed%82%a4-%eb%a7%8c%eb%93%a4%ea%b8%b0","status":"publish","type":"post","link":"http:\/\/pchero21.com\/?p=795","title":{"rendered":"OpenlSSL &#8211; RSA \ud328\ud0a4\uc9c0\ub97c \uc774\uc6a9\ud55c \uacf5\uac1c\ud0a4 &#038; \uac1c\uc778\ud0a4 \ub9cc\ub4e4\uae30"},"content":{"rendered":"<p>\/\/ &nbsp; &nbsp;&nbsp; enc_rsa.c<br \/>\/\/ &nbsp; &nbsp; &nbsp;<br \/>\/\/ &nbsp; &nbsp;&nbsp; Copyright 2009 Kim Sung-tae &lt;pchero21@gmail.com&gt;<br \/>\/\/ &nbsp; &nbsp; &nbsp;<br \/>\/\/ &nbsp; &nbsp;&nbsp; This program is free software; you can redistribute it and\/or modify<br \/>\/\/ &nbsp; &nbsp;&nbsp; it under the terms of the GNU General Public License as published by<br \/>\/\/ &nbsp; &nbsp;&nbsp; the Free Software Foundation; either version 2 of the License, or<br \/>\/\/ &nbsp; &nbsp;&nbsp; (at your option) any later version.<br \/>\/\/ &nbsp; &nbsp; &nbsp;<br \/>\/\/ &nbsp; &nbsp;&nbsp; This program is distributed in the hope that it will be useful,<br \/>\/\/ &nbsp; &nbsp;&nbsp; but WITHOUT ANY WARRANTY; without even the implied warranty of<br \/>\/\/ &nbsp; &nbsp;&nbsp; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&nbsp; See the<br \/>\/\/ &nbsp; &nbsp;&nbsp; GNU General Public License for more details.<br \/>\/\/ &nbsp; &nbsp; &nbsp;<br \/>\/\/ &nbsp; &nbsp;&nbsp; You should have received a copy of the GNU General Public License<br \/>\/\/ &nbsp; &nbsp;&nbsp; along with this program; if not, write to the Free Software<br \/>\/\/ &nbsp; &nbsp;&nbsp; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,<br \/>\/\/ &nbsp; &nbsp;&nbsp; MA 02110-1301, USA.<\/p>\n<p>#include &lt;stdio.h&gt;<br \/>#include &lt;string.h&gt;<\/p>\n<p>#include &lt;openssl\/bio.h&gt;<br \/>#include &lt;openssl\/err.h&gt;<br \/>#include &lt;openssl\/bn.h&gt;<br \/>#include &lt;openssl\/rsa.h&gt;<br \/>#include &lt;openssl\/pem.h&gt;<br \/>#include &lt;openssl\/rand.h&gt;<\/p>\n<p>#define true 1<br \/>#define false 0<\/p>\n<p>\/\/ \ucf5c\ubc31 \ud568\uc218 \uc815\uc758<br \/>static void genrsa_cb(int p, int n, void *arb);<\/p>\n<p>int main(int argc, char** argv)<br \/>{<br \/>&nbsp;&nbsp; &nbsp;<br \/>&nbsp;&nbsp; &nbsp;int keyLenInput = 512; &nbsp; &nbsp;\/\/ \ud0a4 \uae38\uc774<br \/>&nbsp;&nbsp; &nbsp;char outPublicKeyFile[50]; &nbsp; &nbsp;\/\/ \uacf5\uac1c\ud0a4\ub97c \uc800\uc7a5<br \/>&nbsp;&nbsp; &nbsp;char outPrivateKeyFile[50]; &nbsp; &nbsp;\/\/ \uac1c\uc778\ud0a4\ub97c \uc800\uc7a5<br \/>&nbsp;&nbsp; &nbsp;<br \/>&nbsp;&nbsp; &nbsp;int isPem = true; &nbsp; &nbsp;\/\/ PEM \ud615\uc2dd\uc73c\ub85c&#8230;<br \/>&nbsp;&nbsp; &nbsp;<br \/>&nbsp;&nbsp; &nbsp;BIO *publicOut = NULL; &nbsp; &nbsp;\/\/ \uacf5\uac1c\ud0a4\uac00 \uc800\uc7a5\ub418\ub294 \ud30c\uc77c BIO<br \/>&nbsp;&nbsp; &nbsp;BIO *privateOut = NULL; &nbsp; &nbsp;\/\/ \uac1c\uc778\ud0a4\uac00 \uc800\uc7a5\ub418\ub294 \ud30c\uc77c BIO<br \/>&nbsp;&nbsp; &nbsp;BIO *bio_stdout = NULL; &nbsp; &nbsp;\/\/ \ud654\uba74\uc5d0 \ucd9c\ub825\ud560 stdout BIO<br \/>&nbsp;&nbsp; &nbsp;<br \/>&nbsp;&nbsp; &nbsp;RSA *rsa = NULL; &nbsp; &nbsp;\/\/ RSA \uad6c\uc870\uccb4<br \/>&nbsp;&nbsp; &nbsp;<br \/>&nbsp;&nbsp; &nbsp;printf(&#8220;\ud0a4 \uae38\uc774 \uc785\ub825 :&#8221;); &nbsp; &nbsp;\/\/ \ud0a4 \uae38\uc774 \uc785\ub825<br \/>&nbsp;&nbsp; &nbsp;scanf(&#8220;%d&#8221;, &amp;keyLenInput);<br \/>&nbsp;&nbsp; &nbsp;<br \/>&nbsp;&nbsp; &nbsp;printf(&#8220;\uc800\uc7a5\ud560 \uacf5\uac1c\ud0a4 \ud30c\uc77c \uc774\ub984 \uc785\ub825: &#8220;); &nbsp; &nbsp;\/\/ \uacf5\uac1c\ud0a4\ub97c \uc800\uc7a5\ud560 \ud30c\uc77c\uba85 \uc785\ub825<br \/>&nbsp;&nbsp; &nbsp;scanf(&#8220;%s&#8221;, outPublicKeyFile);<br \/>&nbsp;&nbsp; &nbsp;<br \/>&nbsp;&nbsp; &nbsp;printf(&#8220;\uc800\uc7a5\ud560 \uac1c\uc778\ud0a4 \ud30c\uc77c \uc774\ub984 \uc785\ub825: &#8220;); &nbsp; &nbsp;\/\/ \uac1c\uc778\ud0a4\ub97c \uc800\uc7a5\ud560 \ud30c\uc77c\uba85 \uc785\ub825<br \/>&nbsp;&nbsp; &nbsp;scanf(&#8220;%s&#8221;, outPrivateKeyFile);<br \/>&nbsp;&nbsp; &nbsp;<br \/>&nbsp;&nbsp; &nbsp;\/\/ \ud45c\uc900 \ud654\uba74 \ucd9c\ub825 BIO \uc0dd\uc131<br \/>&nbsp;&nbsp; &nbsp;if((bio_stdout = BIO_new(BIO_s_file())) != NULL) {<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;BIO_set_fp(bio_stdout, stdout, BIO_NOCLOSE | BIO_FP_TEXT);<br \/>&nbsp;&nbsp; &nbsp;}<br \/>&nbsp;&nbsp; &nbsp;<br \/>&nbsp;&nbsp; &nbsp; \/\/\uacf5\uac1c\ud0a4\ub97c \uc800\uc7a5\ud560 \ud30c\uc77c BIO \uc0dd\uc131<br \/>&nbsp;&nbsp; &nbsp; if((publicOut = BIO_new(BIO_s_file())) == NULL) {<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; printf(&#8220;BIO \uc0dd\uc131 \uc5d0\ub7ec. %s&#8221;, outPublicKeyFile);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; exit(1);<br \/>&nbsp;&nbsp; &nbsp; }<br \/>&nbsp;&nbsp; &nbsp; <br \/>&nbsp;&nbsp; &nbsp; \/\/ \uac1c\uc778\ud0a4\ub97c \uc800\uc7a5\ud560 \ud30c\uc77c BIO \uc0dd\uc131<br \/>&nbsp;&nbsp; &nbsp; if((privateOut = BIO_new(BIO_s_file())) == NULL) {<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; printf(&#8220;BIO \uc0dd\uc131 \uc5d0\ub7ec. %s&#8221;, outPublicKeyFile);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; exit(1);<br \/>&nbsp;&nbsp; &nbsp; }<br \/>&nbsp;&nbsp; &nbsp; <br \/>&nbsp;&nbsp; &nbsp; \/\/ \ud30c\uc77c BIO\uc640 \ud574\ub2f9 \uacf5\uac1c\ud0a4 \uc800\uc7a5\ud560 \ud30c\uc77c \uc5f0\uacb0<br \/>&nbsp;&nbsp; &nbsp; if(BIO_write_filename(publicOut, outPublicKeyFile) &lt;= 0) {<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; printf(&#8220;BIO \uc0dd\uc131 \uc5d0\ub7ec. %s&#8221;, outPublicKeyFile);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; exit(1);<br \/>&nbsp;&nbsp; &nbsp; }<br \/>&nbsp;&nbsp; &nbsp; <br \/>&nbsp;&nbsp; &nbsp; \/\/ \ud30c\uc77c BIO\uc640 \ud574\ub2f9 \uac1c\uc778\ud0a4 \uc800\uc7a5\ud560 \ud30c\uc77c \uc5f0\uacb0<br \/>&nbsp;&nbsp; &nbsp; if(BIO_write_filename(privateOut, outPrivateKeyFile) &lt;= 0) {<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; printf(&#8220;BIO \uc0dd\uc131 \uc5d0\ub7ec. %s&#8221;, outPrivateKeyFile);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; exit(1);<br \/>&nbsp;&nbsp; &nbsp; }<br \/>&nbsp;&nbsp; &nbsp; <br \/>&nbsp;&nbsp; &nbsp; RAND_status(); &nbsp; &nbsp;\/\/ seed \uc0dd\uc131, \uacf5\uae09<br \/>&nbsp;&nbsp; &nbsp; <br \/>&nbsp;&nbsp; &nbsp; \/\/ \ud0a4 \uc0dd\uc131<br \/>&nbsp;&nbsp; &nbsp; rsa = RSA_generate_key(keyLenInput, RSA_F4, genrsa_cb, NULL);<br \/>&nbsp;&nbsp; &nbsp; <br \/>&nbsp;&nbsp; &nbsp; if(isPem) {<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; \/\/ PEM \ud3ec\uba67\uc73c\ub85c \ud45c\uc900 \ud654\uba74 \ucd9c\ub825 BIO\uc5d0 \uacf5\uac1c\ud0a4 \ucd9c\ub825<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if(!PEM_write_bio_RSA_PUBKEY(bio_stdout, rsa)) {<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printf(&#8220;PEM \ud30c\uc77c \uc0dd\uc131 \uc5d0\ub7ec %s&#8221;, outPrivateKeyFile);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit(1);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; }<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; printf(&#8220;nn&#8221;);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; \/\/ PEM \ud3ec\uba67\uc73c\ub85c \ud45c\uc900 \ud654\uba74 \ucd9c\ub825 BIO\uc5d0 \uac1c\uc778\ud0a4 \ucd9c\ub825<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if(!PEM_write_bio_RSAPrivateKey(bio_stdout, rsa, NULL, NULL, 0, NULL, NULL)) {<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printf(&#8220;PEM \ud30c\uc77c \uc0dd\uc131 \uc5d0\ub7ec %s&#8221;, outPrivateKeyFile);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit(1);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; }<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; \/\/ PEM \ud3ec\uba67\uc73c\ub85c \ud30c\uc77c BIO\uc5d0 \uacf5\uac1c\ud0a4 \ucd9c\ub825<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if(!PEM_write_bio_RSA_PUBKEY(publicOut, rsa)) {<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printf(&#8220;PEM \ud30c\uc77c \uc0dd\uc131 \uc5d0\ub7ec %s&#8221;, outPrivateKeyFile);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit(1);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; }<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; \/\/ PEM \ud3ec\uba67\uc73c\ub85c \ud30c\uc77c BIO\uc5d0 \uac1c\uc778\ud0a4 \ucd9c\ub825<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if(!PEM_write_bio_RSAPrivateKey(privateOut, rsa, NULL, NULL, 0, NULL, NULL)) {<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printf(&#8220;PEM \ud30c\uc77c \uc0dd\uc131 \uc5d0\ub7ec %s&#8221;, outPrivateKeyFile);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit(1);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; }<br \/>&nbsp;&nbsp; &nbsp; }<br \/>&nbsp;&nbsp; &nbsp; else { &nbsp; &nbsp;\/\/ \ub9cc\uc57d DEM \ud3ec\uba67\uc73c\ub85c \ud0a4 \uc30d\uc744 \ucd9c\ub825 \ud55c\ub2e4\uba74..<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;printf(&#8220;DEM PUBLIC KEYn&#8221;);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;\/\/ DEM \ud3ec\uba67\uc73c\ub85c \ud45c\uc900 \ud654\uba74 \ucd9c\ub825 BIO\uc5d0 \uacf5\uac1c\ud0a4 \ucd9c\ub825<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if(!i2d_RSA_PUBKEY_bio(bio_stdout, rsa)) {<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&#8220;DEM \ud30c\uc77c \uc0dd\uc131 \uc5d0\ub7ec %s&#8221;, outPrivateKeyFile);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exit(1);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;printf(&#8220;nn&#8221;);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;printf(&#8220;DER PRIVATE KEYn&#8221;);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;printf(&#8220;n&#8221;);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;\/\/ DEM \ud3ec\uba67\uc73c\ub85c \ud45c\uc900 \ud654\uba74 \ucd9c\ub825 BIO\uc5d0 \uac1c\uc778\ud0a4 \ucd9c\ub825<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if(!i2d_RSAPrivateKey_bio(bio_stdout, rsa)) {<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&#8220;DEM \ud30c\uc77c \uc0dd\uc131 \uc5d0\ub7ec %s&#8221;, outPrivateKeyFile);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exit(1);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;\/\/ DEM \ud3ec\uba67\uc73c\ub85c \ud30c\uc77c BIO\uc5d0 \uacf5\uac1c\ud0a4 \ucd9c\ub825<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if(!i2d_RSA_PUBKEY_bio(publicOut, rsa)) {<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&#8220;DEM \ud30c\uc77c \uc0dd\uc131 \uc5d0\ub7ec %s&#8221;, outPrivateKeyFile);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exit(1);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;\/\/ DEM \ud3ec\uba67\uc73c\ub85c \ud30c\uc77c BIO\uc5d0 \uac1c\uc778\ud0a4 \ucd9c\ub825<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if(!i2d_RSAPrivateKey_bio(privateOut, rsa)) {<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&#8220;DEM \ud30c\uc77c \uc0dd\uc131 \uc5d0\ub7ec %s&#8221;, outPrivateKeyFile);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exit(1);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}<br \/>&nbsp;&nbsp; &nbsp;}<br \/>&nbsp;&nbsp; &nbsp;<br \/>&nbsp;&nbsp; &nbsp;\/\/ RSA \uad6c\uc870\uccb4 \uba54\ubaa8\ub9ac\uc5d0\uc11c \uc0ad\uc81c<br \/>&nbsp;&nbsp; &nbsp;if(rsa != NULL)<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;RSA_free(rsa);<br \/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<br \/>&nbsp;&nbsp; &nbsp;\/\/ BIO\ub97c \uba54\ubaa8\ub9ac\uc5d0\uc11c \uc0ad\uc81c<br \/>&nbsp;&nbsp; &nbsp;if(publicOut != NULL) BIO_free_all(publicOut);<br \/>&nbsp;&nbsp; &nbsp;if(privateOut != NULL) BIO_free_all(privateOut);<br \/>&nbsp;&nbsp; &nbsp;<br \/>&nbsp;&nbsp; &nbsp;<br \/>&nbsp;&nbsp; &nbsp;return 0;<br \/>}<\/p>\n<p>\/\/ \ucf5c\ubc31 \ud568\uc218<br \/>static void genrsa_cb(int p, int n, void *arg)<br \/>{<br \/>&nbsp;&nbsp; &nbsp;char c = &#8216;*&#8217;;<br \/>&nbsp;&nbsp; &nbsp;<br \/>&nbsp;&nbsp; &nbsp;\/\/ prime number e \uc758 \uc0dd\uc131 \uacfc\uc815\uc744 \ud45c\uc2dc<br \/>&nbsp;&nbsp; &nbsp;if(p == 0) c = &#8216;.&#8217;;<br \/>&nbsp;&nbsp; &nbsp;if(p == 1) c = &#8216;+&#8217;;<br \/>&nbsp;&nbsp; &nbsp;if(p == 2) c = &#8216;*&#8217;;<br \/>&nbsp;&nbsp; &nbsp;if(p == 3) c = &#8216;n&#8217;;<br \/>&nbsp;&nbsp; &nbsp;<br \/>&nbsp;&nbsp; &nbsp;printf(&#8220;%c&#8221;, c);<br \/>}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\/\/ &nbsp; &nbsp;&nbsp; enc_rsa.c\/\/ &nbsp; &nbsp; &nbsp;\/\/ &nbsp; &nbsp;&nbsp; Copyright 2009 Kim Sung-tae &lt;pchero21@gmail.com&gt;\/\/ &nbsp; &nbsp; &nbsp;\/\/ &nbsp; &nbsp;&nbsp; This program is free software; you can redistribute it and\/or modify\/\/ &nbsp; &nbsp;&nbsp; it under the terms of the GNU General &hellip; <a href=\"http:\/\/pchero21.com\/?p=795\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[53],"tags":[297,362],"_links":{"self":[{"href":"http:\/\/pchero21.com\/index.php?rest_route=\/wp\/v2\/posts\/795"}],"collection":[{"href":"http:\/\/pchero21.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/pchero21.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/pchero21.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/pchero21.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=795"}],"version-history":[{"count":0,"href":"http:\/\/pchero21.com\/index.php?rest_route=\/wp\/v2\/posts\/795\/revisions"}],"wp:attachment":[{"href":"http:\/\/pchero21.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/pchero21.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=795"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/pchero21.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}