asn1parse.1 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
  2. .\"
  3. .\" Standard preamble:
  4. .\" ========================================================================
  5. .de Sp \" Vertical space (when we can't use .PP)
  6. .if t .sp .5v
  7. .if n .sp
  8. ..
  9. .de Vb \" Begin verbatim text
  10. .ft CW
  11. .nf
  12. .ne \\$1
  13. ..
  14. .de Ve \" End verbatim text
  15. .ft R
  16. .fi
  17. ..
  18. .\" Set up some character translations and predefined strings. \*(-- will
  19. .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
  20. .\" double quote, and \*(R" will give a right double quote. \*(C+ will
  21. .\" give a nicer C++. Capital omega is used to do unbreakable dashes and
  22. .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
  23. .\" nothing in troff, for use with C<>.
  24. .tr \(*W-
  25. .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  26. .ie n \{\
  27. . ds -- \(*W-
  28. . ds PI pi
  29. . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
  30. . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
  31. . ds L" ""
  32. . ds R" ""
  33. . ds C` ""
  34. . ds C' ""
  35. 'br\}
  36. .el\{\
  37. . ds -- \|\(em\|
  38. . ds PI \(*p
  39. . ds L" ``
  40. . ds R" ''
  41. . ds C`
  42. . ds C'
  43. 'br\}
  44. .\"
  45. .\" Escape single quotes in literal strings from groff's Unicode transform.
  46. .ie \n(.g .ds Aq \(aq
  47. .el .ds Aq '
  48. .\"
  49. .\" If the F register is >0, we'll generate index entries on stderr for
  50. .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
  51. .\" entries marked with X<> in POD. Of course, you'll have to process the
  52. .\" output yourself in some meaningful fashion.
  53. .\"
  54. .\" Avoid warning from groff about undefined register 'F'.
  55. .de IX
  56. ..
  57. .if !\nF .nr F 0
  58. .if \nF>0 \{\
  59. . de IX
  60. . tm Index:\\$1\t\\n%\t"\\$2"
  61. ..
  62. . if !\nF==2 \{\
  63. . nr % 0
  64. . nr F 2
  65. . \}
  66. .\}
  67. .\"
  68. .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
  69. .\" Fear. Run. Save yourself. No user-serviceable parts.
  70. . \" fudge factors for nroff and troff
  71. .if n \{\
  72. . ds #H 0
  73. . ds #V .8m
  74. . ds #F .3m
  75. . ds #[ \f1
  76. . ds #] \fP
  77. .\}
  78. .if t \{\
  79. . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  80. . ds #V .6m
  81. . ds #F 0
  82. . ds #[ \&
  83. . ds #] \&
  84. .\}
  85. . \" simple accents for nroff and troff
  86. .if n \{\
  87. . ds ' \&
  88. . ds ` \&
  89. . ds ^ \&
  90. . ds , \&
  91. . ds ~ ~
  92. . ds /
  93. .\}
  94. .if t \{\
  95. . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  96. . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  97. . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  98. . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  99. . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  100. . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
  101. .\}
  102. . \" troff and (daisy-wheel) nroff accents
  103. .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
  104. .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
  105. .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
  106. .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
  107. .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
  108. .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
  109. .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
  110. .ds ae a\h'-(\w'a'u*4/10)'e
  111. .ds Ae A\h'-(\w'A'u*4/10)'E
  112. . \" corrections for vroff
  113. .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
  114. .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
  115. . \" for low resolution devices (crt and lpr)
  116. .if \n(.H>23 .if \n(.V>19 \
  117. \{\
  118. . ds : e
  119. . ds 8 ss
  120. . ds o a
  121. . ds d- d\h'-1'\(ga
  122. . ds D- D\h'-1'\(hy
  123. . ds th \o'bp'
  124. . ds Th \o'LP'
  125. . ds ae ae
  126. . ds Ae AE
  127. .\}
  128. .rm #[ #] #H #V #F C
  129. .\" ========================================================================
  130. .\"
  131. .IX Title "ASN1PARSE 1"
  132. .TH ASN1PARSE 1 "2019-09-12" "1.0.2g" "OpenSSL"
  133. .\" For nroff, turn off justification. Always turn off hyphenation; it makes
  134. .\" way too many mistakes in technical documents.
  135. .if n .ad l
  136. .nh
  137. .SH "NAME"
  138. asn1parse \- ASN.1 parsing tool
  139. .SH "SYNOPSIS"
  140. .IX Header "SYNOPSIS"
  141. \&\fBopenssl\fR \fBasn1parse\fR
  142. [\fB\-inform PEM|DER\fR]
  143. [\fB\-in filename\fR]
  144. [\fB\-out filename\fR]
  145. [\fB\-noout\fR]
  146. [\fB\-offset number\fR]
  147. [\fB\-length number\fR]
  148. [\fB\-i\fR]
  149. [\fB\-oid filename\fR]
  150. [\fB\-dump\fR]
  151. [\fB\-dlimit num\fR]
  152. [\fB\-strparse offset\fR]
  153. [\fB\-genstr string\fR]
  154. [\fB\-genconf file\fR]
  155. .SH "DESCRIPTION"
  156. .IX Header "DESCRIPTION"
  157. The \fBasn1parse\fR command is a diagnostic utility that can parse \s-1ASN.1\s0
  158. structures. It can also be used to extract data from \s-1ASN.1\s0 formatted data.
  159. .SH "OPTIONS"
  160. .IX Header "OPTIONS"
  161. .IP "\fB\-inform\fR \fBDER|PEM\fR" 4
  162. .IX Item "-inform DER|PEM"
  163. the input format. \fB\s-1DER\s0\fR is binary format and \fB\s-1PEM\s0\fR (the default) is base64
  164. encoded.
  165. .IP "\fB\-in filename\fR" 4
  166. .IX Item "-in filename"
  167. the input file, default is standard input
  168. .IP "\fB\-out filename\fR" 4
  169. .IX Item "-out filename"
  170. output file to place the \s-1DER\s0 encoded data into. If this
  171. option is not present then no data will be output. This is most useful when
  172. combined with the \fB\-strparse\fR option.
  173. .IP "\fB\-noout\fR" 4
  174. .IX Item "-noout"
  175. don't output the parsed version of the input file.
  176. .IP "\fB\-offset number\fR" 4
  177. .IX Item "-offset number"
  178. starting offset to begin parsing, default is start of file.
  179. .IP "\fB\-length number\fR" 4
  180. .IX Item "-length number"
  181. number of bytes to parse, default is until end of file.
  182. .IP "\fB\-i\fR" 4
  183. .IX Item "-i"
  184. indents the output according to the \*(L"depth\*(R" of the structures.
  185. .IP "\fB\-oid filename\fR" 4
  186. .IX Item "-oid filename"
  187. a file containing additional \s-1OBJECT\s0 IDENTIFIERs (OIDs). The format of this
  188. file is described in the \s-1NOTES\s0 section below.
  189. .IP "\fB\-dump\fR" 4
  190. .IX Item "-dump"
  191. dump unknown data in hex format.
  192. .IP "\fB\-dlimit num\fR" 4
  193. .IX Item "-dlimit num"
  194. like \fB\-dump\fR, but only the first \fBnum\fR bytes are output.
  195. .IP "\fB\-strparse offset\fR" 4
  196. .IX Item "-strparse offset"
  197. parse the contents octets of the \s-1ASN.1\s0 object starting at \fBoffset\fR. This
  198. option can be used multiple times to \*(L"drill down\*(R" into a nested structure.
  199. .IP "\fB\-genstr string\fR, \fB\-genconf file\fR" 4
  200. .IX Item "-genstr string, -genconf file"
  201. generate encoded data based on \fBstring\fR, \fBfile\fR or both using
  202. \&\fIASN1_generate_nconf\fR\|(3) format. If \fBfile\fR only is
  203. present then the string is obtained from the default section using the name
  204. \&\fBasn1\fR. The encoded data is passed through the \s-1ASN1\s0 parser and printed out as
  205. though it came from a file, the contents can thus be examined and written to a
  206. file using the \fBout\fR option.
  207. .SS "\s-1OUTPUT\s0"
  208. .IX Subsection "OUTPUT"
  209. The output will typically contain lines like this:
  210. .PP
  211. .Vb 1
  212. \& 0:d=0 hl=4 l= 681 cons: SEQUENCE
  213. .Ve
  214. .PP
  215. \&.....
  216. .PP
  217. .Vb 10
  218. \& 229:d=3 hl=3 l= 141 prim: BIT STRING
  219. \& 373:d=2 hl=3 l= 162 cons: cont [ 3 ]
  220. \& 376:d=3 hl=3 l= 159 cons: SEQUENCE
  221. \& 379:d=4 hl=2 l= 29 cons: SEQUENCE
  222. \& 381:d=5 hl=2 l= 3 prim: OBJECT :X509v3 Subject Key Identifier
  223. \& 386:d=5 hl=2 l= 22 prim: OCTET STRING
  224. \& 410:d=4 hl=2 l= 112 cons: SEQUENCE
  225. \& 412:d=5 hl=2 l= 3 prim: OBJECT :X509v3 Authority Key Identifier
  226. \& 417:d=5 hl=2 l= 105 prim: OCTET STRING
  227. \& 524:d=4 hl=2 l= 12 cons: SEQUENCE
  228. .Ve
  229. .PP
  230. \&.....
  231. .PP
  232. This example is part of a self signed certificate. Each line starts with the
  233. offset in decimal. \fBd=XX\fR specifies the current depth. The depth is increased
  234. within the scope of any \s-1SET\s0 or \s-1SEQUENCE.\s0 \fBhl=XX\fR gives the header length
  235. (tag and length octets) of the current type. \fBl=XX\fR gives the length of
  236. the contents octets.
  237. .PP
  238. The \fB\-i\fR option can be used to make the output more readable.
  239. .PP
  240. Some knowledge of the \s-1ASN.1\s0 structure is needed to interpret the output.
  241. .PP
  242. In this example the \s-1BIT STRING\s0 at offset 229 is the certificate public key.
  243. The contents octets of this will contain the public key information. This can
  244. be examined using the option \fB\-strparse 229\fR to yield:
  245. .PP
  246. .Vb 3
  247. \& 0:d=0 hl=3 l= 137 cons: SEQUENCE
  248. \& 3:d=1 hl=3 l= 129 prim: INTEGER :E5D21E1F5C8D208EA7A2166C7FAF9F6BDF2059669C60876DDB70840F1A5AAFA59699FE471F379F1DD6A487E7D5409AB6A88D4A9746E24B91D8CF55DB3521015460C8EDE44EE8A4189F7A7BE77D6CD3A9AF2696F486855CF58BF0EDF2B4068058C7A947F52548DDF7E15E96B385F86422BEA9064A3EE9E1158A56E4A6F47E5897
  249. \& 135:d=1 hl=2 l= 3 prim: INTEGER :010001
  250. .Ve
  251. .SH "NOTES"
  252. .IX Header "NOTES"
  253. If an \s-1OID\s0 is not part of OpenSSL's internal table it will be represented in
  254. numerical form (for example 1.2.3.4). The file passed to the \fB\-oid\fR option
  255. allows additional OIDs to be included. Each line consists of three columns,
  256. the first column is the \s-1OID\s0 in numerical format and should be followed by white
  257. space. The second column is the \*(L"short name\*(R" which is a single word followed
  258. by white space. The final column is the rest of the line and is the
  259. \&\*(L"long name\*(R". \fBasn1parse\fR displays the long name. Example:
  260. .PP
  261. \&\f(CW\*(C`1.2.3.4 shortName A long name\*(C'\fR
  262. .SH "EXAMPLES"
  263. .IX Header "EXAMPLES"
  264. Parse a file:
  265. .PP
  266. .Vb 1
  267. \& openssl asn1parse \-in file.pem
  268. .Ve
  269. .PP
  270. Parse a \s-1DER\s0 file:
  271. .PP
  272. .Vb 1
  273. \& openssl asn1parse \-inform DER \-in file.der
  274. .Ve
  275. .PP
  276. Generate a simple UTF8String:
  277. .PP
  278. .Vb 1
  279. \& openssl asn1parse \-genstr \*(AqUTF8:Hello World\*(Aq
  280. .Ve
  281. .PP
  282. Generate and write out a UTF8String, don't print parsed output:
  283. .PP
  284. .Vb 1
  285. \& openssl asn1parse \-genstr \*(AqUTF8:Hello World\*(Aq \-noout \-out utf8.der
  286. .Ve
  287. .PP
  288. Generate using a config file:
  289. .PP
  290. .Vb 1
  291. \& openssl asn1parse \-genconf asn1.cnf \-noout \-out asn1.der
  292. .Ve
  293. .PP
  294. Example config file:
  295. .PP
  296. .Vb 1
  297. \& asn1=SEQUENCE:seq_sect
  298. \&
  299. \& [seq_sect]
  300. \&
  301. \& field1=BOOL:TRUE
  302. \& field2=EXP:0, UTF8:some random string
  303. .Ve
  304. .SH "BUGS"
  305. .IX Header "BUGS"
  306. There should be options to change the format of output lines. The output of some
  307. \&\s-1ASN.1\s0 types is not well handled (if at all).
  308. .SH "SEE ALSO"
  309. .IX Header "SEE ALSO"
  310. \&\fIASN1_generate_nconf\fR\|(3)