U:RDoc::NormalClass[iI"DH:ETI"OpenSSL::PKey::DH;TI"OpenSSL::PKey::PKey;Fo:RDoc::Markup::Document: @parts[o;;[: @fileI"$ext/openssl/lib/openssl/pkey.rb;T:0@omit_headings_from_table_of_contents_below0o;;[ o:RDoc::Markup::Paragraph;[I"LAn implementation of the Diffie-Hellman key exchange protocol based on ;TI"Ldiscrete logarithms in finite fields, the same basis that DSA is built ;TI"on.;To:RDoc::Markup::BlankLineS:RDoc::Markup::Heading: leveli: textI"7Accessor methods for the Diffie-Hellman parameters;To:RDoc::Markup::List: @type: NOTE: @items[ o:RDoc::Markup::ListItem: @label[I" DH#p;T;[o; ;[I"AThe prime (an OpenSSL::BN) of the Diffie-Hellman parameters.;To;;[I" DH#g;T;[o; ;[I"GThe generator (an OpenSSL::BN) g of the Diffie-Hellman parameters.;To;;[I"DH#pub_key;T;[o; ;[I"KThe per-session public key (an OpenSSL::BN) matching the private key. ;TI"/This needs to be passed to DH#compute_key.;To;;[I"DH#priv_key;T;[o; ;[I"1The per-session private key, an OpenSSL::BN.;T@S; ;i;I"Example of a key exchange;To:RDoc::Markup::Verbatim;[ I"'dh1 = OpenSSL::PKey::DH.new(2048) ;TI"Xder = dh1.public_key.to_der #you may send this publicly to the participating party ;TI"&dh2 = OpenSSL::PKey::DH.new(der) ;TI":dh2.generate_key! #generate the per-session key pair ;TI".symm_key1 = dh1.compute_key(dh2.pub_key) ;TI".symm_key2 = dh2.compute_key(dh1.pub_key) ;TI" ;TI"*puts symm_key1 == symm_key2 # => true;T: @format0; I"ext/openssl/ossl_pkey_dh.c;T; 0; 0; 0[[[[[I" class;T[[: public[[I" generate;TI"ext/openssl/ossl_pkey_dh.c;T[I"new;T@P[:protected[[: private[[I" instance;T[[;[[I"compute_key;T@P[I" export;T@P[I"generate_key!;T@P[I" params;T@P[I"params_ok?;T@P[I" private?;T@P[I" public?;T@P[I"public_key;T@P[I" set_key;T@P[I" set_pqg;T@P[I" to_der;T@P[I" to_pem;T@P[I" to_s;T@P[I" to_text;T@P[;[[;[[[U:RDoc::Context::Section[i0o;;[; 0; 0[@I"ext/openssl/ossl_pkey.c;TI"OpenSSL::PKey;TcRDoc::NormalModule