Hallo,

     I'm trying to read the PEM public key from a memory BIO with the
following code. It's Delphi, but I think the meaning is clear:

=====
procedure TJSEVPKey.GetPublicKeyPEM(jsni: TiJavaScriptNativeInterface);
const
   bufLen = 2048;
var
   bio: Pointer;
   buf: Pointer;
   len: Integer;
   pos: Integer;
   Result: String;
begin
   GetMem(buf, bufLen);
   bio := BIO_new(BIO_s_mem());
   try
      EVPCheck(PEM_write_bio_PUBKEY(bio, FKey));

      // reading from the buffer with the PEM
      pos := 1;
      Result := '';
      repeat
         len := BIO_read(bio, buf, bufLen);
         if len = -1 then
         begin
            if BIO_should_retry(bio) = 0 then
               RaiseEVPError
         end
         else if len > 0 then
         begin
            SetLength(Result, Length(Result) + len);
            Move(buf, Result[pos], len);
            pos := pos + len;
         end
      until len = 0;
   finally
      BIO_vfree(bio);
      FreeMem(buf)
   end;

   jsni.setResult(Result)
end;
=====

     The problem is BIO_read keeps returning -1 and BIO_should_retry
keeps returning non-zero forever, so I'm stuck in an endless loop.
What may be causing this?

Thanks,
-- 
-alex
http://www.ventonegro.org/
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to